gpt4 book ai didi

entity-framework - 单元测试使用 Entity Framework 7,测试有时会失败?

转载 作者:行者123 更新时间:2023-12-04 00:11:48 25 4
gpt4 key购买 nike

我有一堆测试,我在 EF7 中使用了新的 UseInMemory 函数。当我运行它们时,其中一些会失败。当我单独运行它们时,它们都通过了。我最好的猜测是 EF7 中的冲突,因为每个测试都在自己的线程中运行,并且它们都使用相同的 DbContext 类。这是我的一个测试:

    [Fact]
public void Index()
{

DbContextOptionsBuilder<DatabaseContext> optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseInMemoryDatabase();
db = new DatabaseContext(optionsBuilder.Options);
AdminController controller = new AdminController(db);

var result = controller.Index() as ViewResult;
Assert.Equal("Index", result.ViewName);
}

我在每次测试中都重新制作了 dbContext 对象,但它似乎没有任何不同。

非常适合任何输入。谢谢:)

最佳答案

问题是,InMemoryDatabase 中的内存存储被注册为 Singleton,因此您实际上在 DbContext 之间共享数据,即使您认为自己没有。

您必须像这样创建 DbContext:

public abstract class UnitTestsBase
{
protected static T GetNewDbContext<T>() where T : DbContext
{
var services = new ServiceCollection();

services
.AddEntityFramework()
.AddInMemoryDatabase()
.AddDbContext<T>(options => options.UseInMemoryDatabase());

var serviceProvider = services.BuildServiceProvider();

var dbContext = serviceProvider.GetRequiredService<T>();

dbContext.Database.EnsureDeleted();

return dbContext;
}
}


var newTestDbContext = GetNewDbContext<TestDbContext>()

关于entity-framework - 单元测试使用 Entity Framework 7,测试有时会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33606923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com