【发布时间】:2017-07-21 02:04:39
【问题描述】:
我想测试一些属于 ASP.NET Web Api 项目的类。我不需要通过 TestServer 进行请求-响应集成测试(尽管它们很好),但我想让我的测试尽可能接近“真实的东西”。因此,我想使用在 Startup 中添加的服务来解决我的类,但在测试的基础上通过存根/模拟来更改其中的一些(有些测试需要模拟,而另一些则不需要)。
在过去,当 ASP.NET 没有内部依赖注入框架时,这很容易做到。所以我只需调用一个类,将所有依赖项注册到一个容器中,然后为每个测试创建子容器,将一些依赖项更改为模拟,就是这样。
我尝试过这样的事情:
var host = A.Fake<IHostingEnvironment>();
var startup = new Startup(host);
var services = new ServiceCollection();
//Add stubs here
startup.ConfigureServices(services);
var provider = services.BuildServiceProvider();
provider.GetService<IClientsHandler>();
这似乎可行,但我不想为每个测试创建整个启动基础架构。我想创建一次,然后为每个测试创建“子容器”或“子范围”。可能吗?基本上我正在寻找一种在 Startup 之外修改服务的方法。
【问题讨论】:
标签: .net asp.net-web-api asp.net-core .net-core