【发布时间】:2019-11-23 03:38:49
【问题描述】:
我正在尝试运行多个单元测试(通过在 Visual Studio 中按 Run All)。当我使用 Test>Run>All Tests 运行所有测试时,下面的测试失败,但是当我运行单个测试时(通过在测试资源管理器中右键单击测试本身)它成功。我相信我的 Setup 和 TearDown 配置错误,但我不确定缺少什么。
错误:
消息: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}");
}
}
【问题讨论】:
-
为什么每次都在 Setup 中创建一个新的 gcopt?
-
@d.moncada 我试图强迫自己编写不依赖于彼此的测试。为了做到这一点,我在 Setup 方法中的每个测试之前清除上下文对象
标签: c# nunit in-memory-database