C# xUnit与父实体的数据库集成测试
我正在寻找为子实体编写数据库集成测试的最佳实践。如果我想为“更新室”功能编写一个集成测试,但是一个房间有一个建筑物的外键,而一个建筑物有一个帐户的外键。因此,我考虑创建一个fixture类,该类将公开函数,以便有条件地将数据插入数据库。然后在“update room”集成测试中,我会在集成测试之前调用“create account”和“create building”助手函数。在C# xUnit与父实体的数据库集成测试,c#,integration-testing,xunit,C#,Integration Testing,Xunit,我正在寻找为子实体编写数据库集成测试的最佳实践。如果我想为“更新室”功能编写一个集成测试,但是一个房间有一个建筑物的外键,而一个建筑物有一个帐户的外键。因此,我考虑创建一个fixture类,该类将公开函数,以便有条件地将数据插入数据库。然后在“update room”集成测试中,我会在集成测试之前调用“create account”和“create building”助手函数。在testupdateeRoom函数中,在执行实际测试之前调用两个\u entityFixture.Conditiona
testupdateeRoom
函数中,在执行实际测试之前调用两个\u entityFixture.ConditionallyInsert*
函数(\u roomRepository.updateeRoom
)是否是一种良好的做法?是否有更好的实施方案
# Account Table
ID | First Name | Last Name
# Building Table
ID | Account ID | Name
# Room Table
ID | Building ID | Room Number
公共类EntityFixture{
public void ConditionallyInsertAccount(字符串accountId){
//如果accountId不存在,则插入数据库
}
public void conditionallyinstbuilding(字符串buildingId,字符串accountId){
//如果buildingId不存在,则插入数据库
}
}
公共类EntityCollection:ICollectionFixture{
}
公共类RoomIntegrationTests(){
私人实体夹具_实体夹具;
私人IRoomRepository\u roomRepository;
公共RoomIntegrationTests(EntityFixture EntityFixture,IRoomRepository roomRepository){
_entityFixture=entityFixture;
_roomRepository=roomRepository;
}
[事实]
public void testupdateeRoom(){
_实体固定装置。有条件的插入计数(“123”);
_实体固定装置。有条件地插入建筑物(“456”、“123”);
var roomToUpdate=新房间{ID=“456”,RoomNumber=“#4”};
var rowsUpdated=\u roomRepository.updateeRoom(roomToUpdate);
断言。相等(1,行支持);
}
}
public class EntityFixture{
public void ConditionallyInsertAccount(string accountId){
// Insert into the DB if the accountId does not exist
}
public void ConditionallyInsertBuilding(string buildingId, string accountId){
// Insert into the DB if the buildingId does not exist
}
}
public class EntityCollection : ICollectionFixture<EntityFixture>{
}
public class RoomIntegrationTests(){
private EntityFixture _entityFixture;
private IRoomRepository _roomRepository;
public RoomIntegrationTests(EntityFixture entityFixture, IRoomRepository roomRepository){
_entityFixture = entityFixture;
_roomRepository = roomRepository;
}
[Fact]
public void TestUpdateRoom(){
_entityFixture.ConditionallyInsertAccount("123");
_entityFixture.ConditionallyInsertBuilding("456", "123");
var roomToUpdate = new Room{ID = "456", RoomNumber = "#4"};
var rowsUpdated = _roomRepository.UpdateRoom(roomToUpdate);
Assert.Equal(1, rowsUpdated);
}
}