内存中Web API集成测试用Ninject模拟出控制器的依赖关系



我有一个Web API 2应用程序,我想在内存中添加一些托管服务器的测试。我的测试中有这个配置。

public BaseServerTests()
{
var fake = Substitute.For<IFooService>();
_server = TestServer.Create(app =>
{
var configuration = new HttpConfiguration();
var container = new StandardKernel();
container.Bind<IFooService>().ToConstant(fake);
configuration.DependencyResolver = new NinjectDependencyResolver(container);
WebApiConfig.Register(configuration);
app.UseWebApi(configuration);
});
_client = _server.HttpClient;
}

控制器只有一个这样的构造函数。

public FooController(IFooService fooSrv)
{
_fooSrv = fooSrv;
}

WebApi中的Ninject配置如下所示。

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(NinjectWebCommon), "Start")]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(NinjectWebCommon), "Stop")]
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}

我得到以下错误。

Ninject.ActivationException:'使用从ModelValidatorProvider到NinjectDefaultModelValidatorProvider的绑定激活ModelValidatorProvider'时出错在两个服务的构造函数之间检测到循环依赖关系

这是用Ninject设置伪依赖项的正确方法吗?

我做得完全不对。我现在开始工作了。我不得不安装软件包Ninject.Web.WebApi.OwinSelfHost.

public BaseServerTests()
{
var fake = Substitute.For<ISomeService>();
fake.SomeCall().Returns("this is totally fake");
_server = TestServer.Create(app =>
{
var configuration = new HttpConfiguration();
var container = new StandardKernel();
container.Bind<ISomeService>().ToConstant(fake);
WebApiConfig.Register(configuration);
app.UseNinject(() => container);
app.UseNinjectWebApi(configuration);
});
_client = _server.HttpClient;
}

最新更新