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