C# NUnit测试失败,因为对象已在内存中

C# NUnit测试失败,因为对象已在内存中,c#,nunit,in-memory-database,C#,Nunit,In Memory Database,我正在尝试运行几个单元测试(在VisualStudio中按RunAll)。当我使用Test>run>all测试运行所有测试时,下面的测试失败,但当我运行单个测试时(通过在测试资源管理器中右键单击测试本身),它成功了。我相信我的设置和拆卸配置错误,但我不确定遗漏了什么 错误: 消息:System.ArgumentException:已添加具有相同密钥的项。关键字:System.Object[] 我的代码: [TestFixture] public class GCLandingUserModelT

我正在尝试运行几个单元测试(在VisualStudio中按RunAll)。当我使用Test>run>all测试运行所有测试时,下面的测试失败,但当我运行单个测试时(通过在测试资源管理器中右键单击测试本身),它成功了。我相信我的设置和拆卸配置错误,但我不确定遗漏了什么

错误:

消息:System.ArgumentException:已添加具有相同密钥的项。关键字:System.Object[]

我的代码:

[TestFixture]
public class GCLandingUserModelTest
{
    DbContextOptions<GreenCardContext> gcopt = new DbContextOptionsBuilder<GreenCardContext>()
        .UseInMemoryDatabase(databaseName: "GreenCardSite").Options;

    private GreenCardContext _mockGC;

    [SetUp]
    public void InitData()
    {
        _mockGC = new GreenCardContext(gcopt);
    }

    [TearDown]
    public void ClearData()
    {
        _mockGC = null;
    }

    [Test]
    public void TestAddObjMoq()
    {
            // Insert seed data into the database using one instance of the context
            _mockGC.UserRolePrice.Add(new UserRolePrice { LGID = 1, UserRoleId = -1 });
            _mockGC.SaveChanges();
            Assert.AreEqual(1, _mockGC.UserRolePrice.ToList().Count, $"UserRolePrice not added to context");

            //verify that obj created and changes were saved on the Mock Context
            int objlgid = _mockGC.UserRolePrice.Where(x => x.UserRoleId == -1).Select(x => x.LGID).First();
            Assert.AreEqual(1, objlgid,$"The returned lgid was: {objlgid}");
    }
}
[TestFixture]
公共类GCLandingUserModelTest
{
DbContextOptions gcopt=新的DbContextOptionsBuilder()
.UseInMemoryDatabase(数据库名称:“GreenCardSite”)。选项;
私人绿卡背景(mockGC);
[设置]
public void InitData()
{
_mockGC=新的绿卡上下文(gcopt);
}
[撕裂]
public void ClearData()
{
_mockGC=null;
}
[测试]
公共无效测试
{
//使用上下文的一个实例将种子数据插入数据库
_mockGC.UserRolePrice.Add(新的UserRolePrice{LGID=1,UserRoleId=-1});
_mockGC.SaveChanges();
AreEqual(1,_mockGC.UserRolePrice.ToList().Count,$“UserRolePrice未添加到上下文”);
//验证是否在模拟上下文中创建了obj并保存了更改
int objlgid=_mockGC.UserRolePrice.Where(x=>x.UserRoleId==-1)。选择(x=>x.LGID).First();
AreEqual(1,objlgid,$“返回的lgid是:{objlgid}”);
}
}

可能需要清除内存中的数据存储

确保上下文的数据库不存在。如果有 不存在,不采取任何行动。如果它确实存在,则数据库是 删除

警告:将删除整个数据库,并且不会进行任何更改 仅删除模型为此目的使用的数据库对象 上下文


为什么每次在安装程序中都要创建一个新的gcopt?@d.moncada我试图强迫自己编写互不依赖的测试。为了做到这一点,我在Setup方法中的每个测试之前都会清除context对象
_mockGC.Database.EnsureDeleted();