在 InMemory 数据库上使用 EnsureDeleted() 时 XUnit 测试停止 运行
XUnit Tests Stop Running When Using EnsureDeleted() on InMemory Database
在我的 Xunit 测试启动期间,我正在为我的 entity framework 数据库上下文定义依赖注入,使用一个名为 FakeMyDbContext.[=13= 的带有假数据的假版本]
public void ConfigureInMemoryDatabases(IServiceCollection services)
{
services.AddScoped(_ =>
{
var smtrOptions = new DbContextOptionsBuilder<MyDbContext>()
.UseInMemoryDatabase(databaseName: $"MyDb_{Guid.NewGuid()}")
.Options;
return new FakeMyDbContext(smtrOptions) as MyDbContext;
});
}
我有多个测试 运行 我的服务使用这个数据库上下文,但是只有一个 运行 。我已经在 FakeMyDbContext class:
的处置中找到以下行的问题
public override void Dispose()
{
base.Dispose();
Database.EnsureDeleted();
}
如果我删除 Database.EnsureDeleted(),那么所有测试 运行。如果我把它留在里面,那么只有一个测试 运行s。我不确定为什么会发生这种情况,因为我没有看到任何错误,并且每个上下文实例都有一个唯一的数据库名称(附加了 guid)。
我的问题的原因是我在处理上下文后调用了 EnsureDeleted。
dispose 方法应该如下所示
public override void Dispose()
{
Database.EnsureDeleted();
base.Dispose();
}
在我的 Xunit 测试启动期间,我正在为我的 entity framework 数据库上下文定义依赖注入,使用一个名为 FakeMyDbContext.[=13= 的带有假数据的假版本]
public void ConfigureInMemoryDatabases(IServiceCollection services)
{
services.AddScoped(_ =>
{
var smtrOptions = new DbContextOptionsBuilder<MyDbContext>()
.UseInMemoryDatabase(databaseName: $"MyDb_{Guid.NewGuid()}")
.Options;
return new FakeMyDbContext(smtrOptions) as MyDbContext;
});
}
我有多个测试 运行 我的服务使用这个数据库上下文,但是只有一个 运行 。我已经在 FakeMyDbContext class:
的处置中找到以下行的问题 public override void Dispose()
{
base.Dispose();
Database.EnsureDeleted();
}
如果我删除 Database.EnsureDeleted(),那么所有测试 运行。如果我把它留在里面,那么只有一个测试 运行s。我不确定为什么会发生这种情况,因为我没有看到任何错误,并且每个上下文实例都有一个唯一的数据库名称(附加了 guid)。
我的问题的原因是我在处理上下文后调用了 EnsureDeleted。
dispose 方法应该如下所示
public override void Dispose()
{
Database.EnsureDeleted();
base.Dispose();
}