c# - Moq Service in ASP.NET Core -
i have problem unit tests. want check remove method in service invoke remove method in repository.
my test method:
[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()); } currently return me fail exception becouse room id doesn't exist.
my repository remove method implementation:
public async task removeasync(room room) { _rooms.remove(room); await task.completedtask; } and service
public async task removeasync(guid roomid) { var room = await _roomrepository.getorfailasync(roomid); await _roomrepository.removeasync(room); }
you need set getorfailasync method on mock iroomrepository, otherwise mock not going return anything.
so arrange section becomes:
var room = new room(guid.newguid(), "a-11"); var roomrepositorymock = new mock<iroomrepository>(); roomrepositorymock.setup(r => r.getorfailasync).returns(room); var mappermock = new mock<imapper>(); var roomservice = new roomservice(roomrepositorymock.object, mappermock.object); you want verify call well:
roomrepositorymock.verify(r => r.getorfailasync(room.id), times.once()); and consider changing other verification match room want delete, rather isany:
roomrepositorymock.verify(x => x.removeasync(room), times.once());
Comments
Post a Comment