テストしたい次のコードがあります。
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に設定し、メッセージを永続化してから、ステータスを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メソッドを2回呼び出すことを検証することを期待しています。しかし、それは失敗します
引数が違います!
手がかりはありますか?