Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# xUnit与父实体的数据库集成测试_C#_Integration Testing_Xunit - Fatal编程技术网

C# xUnit与父实体的数据库集成测试

C# xUnit与父实体的数据库集成测试,c#,integration-testing,xunit,C#,Integration Testing,Xunit,我正在寻找为子实体编写数据库集成测试的最佳实践。如果我想为“更新室”功能编写一个集成测试,但是一个房间有一个建筑物的外键,而一个建筑物有一个帐户的外键。因此,我考虑创建一个fixture类,该类将公开函数,以便有条件地将数据插入数据库。然后在“update room”集成测试中,我会在集成测试之前调用“create account”和“create building”助手函数。在testupdateeRoom函数中,在执行实际测试之前调用两个\u entityFixture.Conditiona

我正在寻找为子实体编写数据库集成测试的最佳实践。如果我想为“更新室”功能编写一个集成测试,但是一个房间有一个建筑物的外键,而一个建筑物有一个帐户的外键。因此,我考虑创建一个fixture类,该类将公开函数,以便有条件地将数据插入数据库。然后在“update room”集成测试中,我会在集成测试之前调用“create account”和“create building”助手函数。在
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);
  }
}