Я использую Mockito для написания модульного теста на Java, и я хотел бы проверить, что определенный метод - это последний, вызываемый объектом.Используйте Mockito для проверки того, что после метода ничего не вызывается
я делаю что-то вроде этого в коде тестируемый:
row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();
В моем издеваться, я не забочусь о том порядке, в котором я редактировать все на ряде, но это очень важно, чтобы Я не попытаюсь сделать что-нибудь еще после того, как я его сохранил. Есть ли хороший способ сделать это?
Заметьте, что я не ищу подтвержденияNoMoreInteractions: он не подтверждает, что saveToDatabase - это последняя вызванная вещь, и она также терпит неудачу, если я вызываю что-либо в строке, которую я явно не проверяю. Я хотел бы быть в состоянии сказать что-то вроде:
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();
Если это поможет, я переключение на Mockito из теста JMock, который сделал это:
row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
записку из будущего: мы в конечном счете переработан это, чтобы избежать зависимости заказа. В частности, мы переместили часть saveToDatabase() на внешний уровень кода, где он автоматически вызывается в нужное время. В общем, если вам нужно сделать что-то вроде этого с макетом, ваши тесты говорят вам о рефакторе. Тем не менее, все же приятно проводить тест, который может работать до тех пор, пока дизайн не будет изменен. –