Comments 4
Пример с моком нулла конечно прикольный, но что-то не сходится, у меня полно тестов, где метод замокан, согласно сценарю теста он НЕ вызывается, а в конце делается проверка:
verify(замоканныйОбъект, times(0)).замоканныйМетод();
и все работает как ожидается, с ошибкой как у вас не падает.
В примере падение происходит в строке Mockito.when(null).thenReturn("qwerty");
- в момент настройки (когда история вызовов пустая), а не в момент использования.
Возможно, так проще
@Test
public void testFailed() {
Object mockObject = Mockito.mock(Object.class);
//mockObject.toString(); // если раскомментить, ошибки не будет
Mockito.when(null) // тут падение
.thenReturn("qwerty");
Assertions.assertEquals("qwerty", mockObject.toString());
}
Mockito явно не сможет определить метод, который мы хотим переопределить. Вместо этого, он собирает историю вызова методов у mock-объектов и берет последний.
Семён Семёныч! Несколько раз сталкивался со странным поведением моков, которое не мог побороть и приходилось тестировать обходным манёвром. О оно вон оно что! Скорее всего дело было в этом. Блин, чёртовы маги, наколдовали колдунства! :)
Высокие технологии или дешевые фокусы с двойным дном