在集成测试中访问内存 dbcontext
Access in memory dbcontext in integration test
如何在集成测试中访问内存数据库的 dbcontext?
并进行类似的测试:
public class IndexPageTests :
IClassFixture<CustomWebApplicationFactory<RazorPagesProject.Startup>>
{
private readonly HttpClient _client;
private readonly CustomWebApplicationFactory<RazorPagesProject.Startup>
_factory;
public IndexPageTests(
CustomWebApplicationFactory<RazorPagesProject.Startup> factory)
{
_factory = factory;
_client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
}
在此 IndexPageTests 中是否可以访问内存中的 dbcontext?
我试过了
using (var context = new ApplicationDbContext(???))
我需要访问我之前从 CustomWebApplicationFactory 播种的表中的数据
但不确定要为选项添加什么
感谢 Nikosi,这是我设法获取 dbcontext 的方式
var scopeFactory = _factory.Server.Host.Services.GetService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{
var context = scope.ServiceProvider.GetService<ApplicationDbContext>();
}
下面的代码与我一起工作,因为它没有抛出异常:
var scope = factory.Services.GetService<IServiceScopeFactory().CreateScope();
var context = scope.ServiceProvider.GetService<ApplicationDbContext();
如何在集成测试中访问内存数据库的 dbcontext?
并进行类似的测试:
public class IndexPageTests :
IClassFixture<CustomWebApplicationFactory<RazorPagesProject.Startup>>
{
private readonly HttpClient _client;
private readonly CustomWebApplicationFactory<RazorPagesProject.Startup>
_factory;
public IndexPageTests(
CustomWebApplicationFactory<RazorPagesProject.Startup> factory)
{
_factory = factory;
_client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
}
在此 IndexPageTests 中是否可以访问内存中的 dbcontext?
我试过了
using (var context = new ApplicationDbContext(???))
我需要访问我之前从 CustomWebApplicationFactory 播种的表中的数据
但不确定要为选项添加什么
感谢 Nikosi,这是我设法获取 dbcontext 的方式
var scopeFactory = _factory.Server.Host.Services.GetService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{
var context = scope.ServiceProvider.GetService<ApplicationDbContext>();
}
下面的代码与我一起工作,因为它没有抛出异常:
var scope = factory.Services.GetService<IServiceScopeFactory().CreateScope();
var context = scope.ServiceProvider.GetService<ApplicationDbContext();