实体框架核心InMemory数据库测试在并行运行时中断

时间:2017-11-16 17:35:55

标签: c# .net entity-framework testing entity-framework-core

在进行所有测试时,我最终会收到错误消息:

  

"已添加具有相同键的项目。关键:125"

每次测试单独运行时都不会发生这种情况。

有趣的是,每个测试都使用不同的DbName,以避免任何冲突:

[TestMethod]
public void Test1() 
{
    using (var context = CreateTestingContext()) 
    {
        ...
    }
}

[TestMethod]
public void Test2() 
{
    using (var context = CreateTestingContext()) 
    {
        ...
    }
}

protected static SGDTPContext CreateTestingContext([CallerMemberName] string dbName = "TestingDb")
{
    var builder = new DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase(dbName);
    return new MyDbContext(builder.Options);
}

这很奇怪,因为当我单独进行测试时,它们是绿色的!当我同时运行它们时,有些最终会失败。

注意:我使用Visual Studio 2017中集成的MSTest。

1 个答案:

答案 0 :(得分:1)

遇到同样的问题,解决方案是为每个测试类使用不同的databaseName。这样做时,您可以在测试类中获得相同的dbcontext,但是一次运行所有测试时,它不会与不同的线程冲突。

        protected readonly YourDbContext _inMemoryContext;
        protected readonly DbContextOptions<YourDbContext> _options;

        _options = new DbContextOptionsBuilder<YourDbContext>().UseInMemoryDatabase(databaseName: "WhateverNameforClassScope").Options;

       _inMemoryContext = new YourDbContext(_options);