У меня есть простой код, который устанавливает объект в состояние ОБРАБОТКА, выполняет некоторые вещи, а затем устанавливает его на УСПЕХ. Я хочу убедиться, что сохранение выполняется с правильными значениями.
Проблема в том, что когда выполняются тесты verify (), .equals()
вызывается для объекта в том виде, в каком он есть в конце теста, а не на полпути.
Например, код:
public void process(Thing thing) {
thing.setValue(17);
thing.setStatus(Status.PROCESSING);
dao.save(thing);
doSomeMajorProcessing(thing);
thing.setStatus(Status.SUCCESS);
dao.save(thing);
}
Я хочу проверить:
public void test() {
Thing actual = new Thing();
processor.process(actual);
Thing expected = new Thing();
expected.setValue(17);
expected.setStatus(Status.PROCESSING);
verify(dao).save(expected);
// ....
expected.setStatus(Status.SUCCESS);
verify(dao).save(expected);
}
При первой проверке actual.getStatus()
равен Status.SUCCESS
, так как Mockito просто сохраняет ссылку на объект и может только проверить его значение в конце.
Я считал, что если when(...)
там, где он задействован, то .equals()
будет вызван в нужное время, и результат будет только в том случае, если Я хотел, чтобы То было тем, чем я хотел. Однако в этом случае .save()
ничего не возвращает.
Как проверить, что объект переведен в правильные состояния?