在内存 Web API 集成测试中模拟控制器依赖关系 Ninject
In memory Web API integration tests mocking out controller dependencies with 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;
}
Web Api 中的 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;
}
我有一个 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;
}
Web Api 中的 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;
}