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

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -