Ich habe ein Problem mit meinen Komponententests. Ich möchte überprüfen, dass meine remove-Methode im Dienst Methode remove im Repository aufgerufen wird.Moq Service in ASP.NET Core
Meine Testmethode:
[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());
}
Derzeit zurückgeben mich mit dieser ID mit Ausnahme becouse Raum FAIL existiert nicht.
Mein Repository entfernen Methode Implementierung:
public async Task RemoveAsync(Room room)
{
_rooms.Remove(room);
await Task.CompletedTask;
}
und Service
public async Task RemoveAsync(Guid roomId)
{
var room = await _roomRepository.GetOrFailAsync(roomId);
await _roomRepository.RemoveAsync(room);
}
Ihr Code ist nicht wirklich 'Add()' irgendetwas mit 'roomServic e', warum könnte es 'Remove()'? – haim770
Sie müssen die 'GetOrFailAsync'-Methode auch im Unit-Test verspotten und eine' Room'-Entity zurückgeben, um sie zu entfernen. –
GetOrFailAsync ist eine Erweiterungsmethode. Kann ich es verspotten? Ich habe das getan: 'roomRepositoryMock.Setup (x => x.GetAsync (room.RoomId)). ReturnsAsync (Raum); 'Es funktioniert. – Kerni