java unit-testing testing junit easymock

java - Método de vacío EasyMock



easymock maven (2)

Intento utilizar EasyMock para simular alguna interfaz de base de datos, así puedo probar la lógica de negocio con un método de envoltura. He estado yendo bien con los métodos que vuelven utilizando lo siguiente en mi configuración de mi prueba.

DBMapper dbmapper = EasyMock.createMock(DBMapper.class); userService.setDBMapper(dbmapper);

entonces dentro de mi prueba real corro

EasyMock.expect(dbmapper.getUser(userId1)).andReturn(mockUser1); EasyMock.replay(dbmapper); userService.getUser(userId1);

Este servicio se conecta al dbmapper y devuelve el objeto (el mapper se inyecta utilizando métodos setter)

Este tipo de burlas parecen funcionar bien. Sin embargo, cuando intento ejecutar una prueba para

userService.addUser(newUser1);

Este método llama a un método vacío.

dbmapper.createUser(newUser);

Es este método que tengo problemas para burlarme. He intentado lo siguiente

EasyMock.expectLastCall(); EasyMock.replay(dbMapper); userService.addUser(newUser1);

como algunas otras publicaciones / preguntas, etc. parecen sugerir que recibo una IlligalStateException: no last call on a mock available

¿Puede alguien señalarme en la dirección correcta, por favor?

Muchas gracias de antemano


Estás cerca.

Solo necesita llamar al método en su simulacro antes de llamar a expectLastCall()

Entonces tu expectativa sería así:

userService.addUser(newUser1); EasyMock.expectLastCall(); EasyMock.replay(dbMapper); userService.addUser(newUser1);

Esto funciona porque el objeto simulado está en modo Grabación antes de la llamada para replay() , por lo que las llamadas realizarán un comportamiento predeterminado (devolver nulo / no hacer nada) y será elegible para reproducir cuando se llame al método de replay() .

Lo que me gusta hacer para asegurarme de que es obvio que la llamada al método es para una expectativa es poner un pequeño comentario en frente de este modo:

/* expect */ userService.addUser(newUser1); EasyMock.expectLastCall(); EasyMock.replay(dbMapper); userService.addUser(newUser1);


Este problema no ocurre si usas la API ''agradable'':

DBMapper dbmapper = EasyMock.createNiceMock (DBMapper.class);

Hay dos tipos de simulacros: estricto y agradable. El simulacro estricto arroja un error de aserción en caso de que se llame a un método inesperado. El simulacro agradable permite llamadas al método inesperado en el simulacro.

Para más detalles, consulte el documento oficial - http://easymock.org/user-guide.html#mocking-strict