WebApplicationFactory<T>
设置我的测试,详细信息请参见ASP.NET Core 中的集成测试。 在进行一些测试之前,我需要使用在真实 Startup 类中配置的服务来进行设置。 我遇到的问题是我看不到从工厂获得服务的方法。
我可以使用
factory.Server
从
factory.Host.Services.GetRequiredService<ITheType>();
获取服务,但在调用
factory.Server
之前,
factory.CreateClient();
为空。我是否缺少任何使用工厂获得服务的方法?
谢谢。
范围才能获得必要的服务:
using (var scope = AppFactory.Server.Host.Services.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<MyDatabaseContext>();
}
请原谅我。我知道您要求 Net Core 2.1,但自从 v3.1+ 以来,人们也来到了这里......
我的项目使用Net Core 3.1。当我像 Alexey Starchikov 的建议一样使用AppFactory.Server.Host.Services.CreateScope()
时,我遇到了这个错误。
The TestServer constructor was not called with a IWebHostBuilder so IWebHost is not available.
此处注明,所以我使用以下方法。我将数据库播种放入测试类的构造函数中。请注意,我不必打电话给
factory.CreateClient()
。我像往常一样在测试方法中创建客户端变量。
using (var scope = this.factory.Services.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>();
// Seeding ...
dbContext.SaveChanges();
}
_factory.Services.CreateScope()
:
using var scope = _factory.Services.CreateScope();
var sender = scope.ServiceProvider.GetRequiredService<IEmailSender>();
await sender.SendAsync("Hello");