У меня есть следующий код, который я хочу проверить:
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; }
}
Мне нужно проверить, что метод acceptFromOffice действительно устанавливает статус в 0, чем сообщение persist, а затем перебирает его статус в 1, а затем снова сохраняет его.
С Mockito я попытался сделать следующее:
@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) { }
}));
}
Я действительно ожидаю здесь, что проверка проверит вызов дважды метода makePersistent с другим состоянием объекта сообщения. Но он не говорит, что
Аргумент различны!
Любые подсказки?