私の単体テストに問題があります。私は、私のサービスのremoveメソッドがリポジトリのremoveメソッドを呼び出すことを確認したい。ASP.NETコアのMoqサービス
私の試験方法:
[Fact]
public async Task Remove_room_async_should_invoke_remove_room_async_on_room_repository()
{
//Arrange
var room = new Room(Guid.NewGuid(), "A-11");
var roomRepositoryMock = new Mock<IRoomRepository>();
var mapperMock = new Mock<IMapper>();
var roomService = new RoomService(roomRepositoryMock.Object, mapperMock.Object);
//Act
await roomService.RemoveAsync(room.RoomId);
//Assert
roomRepositoryMock.Verify(x => x.RemoveAsync(It.IsAny<Room>()), Times.Once());
}
現在、それは私がこのidが存在しないと部屋becouse例外で失敗を返します。
マイリポジトリremoveメソッドの実装:
public async Task RemoveAsync(Room room)
{
_rooms.Remove(room);
await Task.CompletedTask;
}
とサービスあなたのモックIRoomRepositoryにGetOrFailAsync方法を設定する必要があり
public async Task RemoveAsync(Guid roomId)
{
var room = await _roomRepository.GetOrFailAsync(roomId);
await _roomRepository.RemoveAsync(room);
}
あなたのコードは実際に 'roomServicなぜ 'Remove()'できるのでしょうか? – haim770
ユニットテストでも 'GetOrFailAsync'メソッドをモックし、そこから削除する 'Room'エンティティを返す必要があります。 –
GetOrFailAsyncは拡張メソッドです。私はそれを嘲ることができますか?私はこれをしました: 'roomRepositoryMock.Setup(x => x.GetAsync(room.RoomId))。ReturnAsync(room); 'それは動作します。 – Kerni