如何在 Entity Framework 中编写集成测试来测试数据是否添加到 2 个相关表?
How write a integration Test in Entity Framework to Test if data added to 2 related tables?
我正在用 C# 编写集成测试,Db 由 Entity Framework6 负责。当数据添加到按键相关的 2 table 时,我无法测试是否正确添加了数据。
考虑:
Make Table - Id, name, YearId
Year Table - Id, CalenderYear
关系:
1 to many - 1 Year has n Make
这是我在集成测试中的方法,我想测试我是否可以成功添加到两者 table:
[TestMethod]
[TestCategory("Integration")]
public void ApplicationsContext_AddMake_ShouldAddSuccessfully()
{
// Arrange.
var currentEntity = ApplicationsContext.Makes.ToList<Make>();
// Act.
var newYear = Fakes.GetNewYear();
ApplicationsContext.Years.Add(newYear);
ApplicationsContext.SaveChanges();
var newMake = Fakes.GetNewMake();
ApplicationsContext.Makes.Add(newMake);
ApplicationsContext.SaveChanges();
// Assert.
var entityAfterOperation = ApplicationsContext.Makes.ToList<Make>();
Assert.IsTrue(currentEntity.Count < entityAfterOperation.Count);
}
这是我的假货class:
public static Year GetNewYear()
{
var newYear = new Year()
{
CalendarYear = 2015
};
return newYear;
}
public static Make GetNewMake()
{
var newMake = new Make()
{
Name = "Toyota",
Description = "This is Make Description",
};
return newMake;
}
这行不通,因为我真的不知道如何发送 Id of Year to Make?
这是我得到的错误:
{"Violation of UNIQUE KEY constraint 'UQ_Year_CalendarYear'. Cannot insert duplicate key in object 'Common.Year'. The duplicate key value is (2015).\r\nThe statement has been terminated."}
当您将它们添加到数据库时,您并没有关联您正在创建的 Year 和 Make。
所以在添加它们之前,您应该将 newMake
添加到 newYear
。
var newYear = Fakes.GetNewYear();
newYear.Makes.Add(Fakes.GetNewMake());
ApplicationsContext.Years.Add(newYear);
ApplicationsContext.SaveChanges();
当您在保存更改之前执行此操作时,两者都会一次性添加到数据库中。
我正在用 C# 编写集成测试,Db 由 Entity Framework6 负责。当数据添加到按键相关的 2 table 时,我无法测试是否正确添加了数据。
考虑:
Make Table - Id, name, YearId
Year Table - Id, CalenderYear
关系:
1 to many - 1 Year has n Make
这是我在集成测试中的方法,我想测试我是否可以成功添加到两者 table:
[TestMethod]
[TestCategory("Integration")]
public void ApplicationsContext_AddMake_ShouldAddSuccessfully()
{
// Arrange.
var currentEntity = ApplicationsContext.Makes.ToList<Make>();
// Act.
var newYear = Fakes.GetNewYear();
ApplicationsContext.Years.Add(newYear);
ApplicationsContext.SaveChanges();
var newMake = Fakes.GetNewMake();
ApplicationsContext.Makes.Add(newMake);
ApplicationsContext.SaveChanges();
// Assert.
var entityAfterOperation = ApplicationsContext.Makes.ToList<Make>();
Assert.IsTrue(currentEntity.Count < entityAfterOperation.Count);
}
这是我的假货class:
public static Year GetNewYear()
{
var newYear = new Year()
{
CalendarYear = 2015
};
return newYear;
}
public static Make GetNewMake()
{
var newMake = new Make()
{
Name = "Toyota",
Description = "This is Make Description",
};
return newMake;
}
这行不通,因为我真的不知道如何发送 Id of Year to Make? 这是我得到的错误:
{"Violation of UNIQUE KEY constraint 'UQ_Year_CalendarYear'. Cannot insert duplicate key in object 'Common.Year'. The duplicate key value is (2015).\r\nThe statement has been terminated."}
当您将它们添加到数据库时,您并没有关联您正在创建的 Year 和 Make。
所以在添加它们之前,您应该将 newMake
添加到 newYear
。
var newYear = Fakes.GetNewYear();
newYear.Makes.Add(Fakes.GetNewMake());
ApplicationsContext.Years.Add(newYear);
ApplicationsContext.SaveChanges();
当您在保存更改之前执行此操作时,两者都会一次性添加到数据库中。