He siguientes códigos Quiero prueba:Mockito a métodos de ensayo vacíos
public class MessageService {
private MessageDAO dao;
public void acceptFromOffice(Message message) {
message.setStatus(0);
dao.makePersistent(message);
message.setStatus(1);
dao.makePersistent(message);
}
public void setDao (MessageDAO mD) { this.dao = mD; }
}
public class Message {
private int status;
public int getStatus() { return status; }
public void setStatus (int s) { this.status = s; }
public boolean equals (Object o) { return status == ((Message) o).status; }
public int hashCode() { return status; }
}
necesito verificar, que acceptFromOffice método realmente establece el estado a 0, que los mensajes se mantengan, a continuación, Chage su estado a 1, y luego persistir de nuevo.
Con Mockito, he tratado de hacer lo siguiente:
@Test
public void testAcceptFromOffice() throws Exception {
MessageDAO messageDAO = mock(MessageDAO.class);
MessageService messageService = new MessageService();
messageService.setDao(messageDAO);
final Message message = spy(new Message());
messageService.acceptFromOffice(message);
verify(messageDAO).makePersistent(argThat(new BaseMatcher<Message>() {
public boolean matches (Object item) {
return ((Message) item).getStatus() == 0;
}
public void describeTo (Description description) { }
}));
verify(messageDAO).makePersistent(argThat(new BaseMatcher<Message>() {
public boolean matches (Object item) {
return ((Message) item).getStatus() == 1;
}
public void describeTo (Description description) { }
}));
}
realmente espero aquí que la verificación verificará llamar dos veces del método makePersistent con el estado de un objeto de mensaje diferente. Pero falla diciendo que
¡La (s) argumentación (es) son diferentes!
¿Alguna pista?
¿Es necesario un Mockito? Podrías crear TestMessage personalizado que extienda Message en una clase MessageDAO. Si esa es una opción, puedo escribir un código para ilustrar. Si no lo es, no lo haré :) – extraneon