#java #mockito
Вопрос:
Я пытаюсь заглушить этот метод: QueryUtils.Упорядочить(сортировать, корень, конструктор), и я делаю
when(QueryUtils.toOrder(any(Sort.class), any(Root.class), any(CriteriaBuilder.class)).thenReturn(mock(List.class));
но он входит в тело метода queryUtils, и в нем будет указано, что сортировка равна нулю, и он выдаст NPE. Но зачем ему нужно входить в тело метода, если это заглушка? У меня раньше не было этой проблемы, и я не думаю, что это должно волновать, какова внутренняя логика метода.
Комментарии:
1. В ваших классах может быть больше вещей, чем в вашей базе данных, что приведет к их обнулению, или в вашем запросе могут быть некоторые вещи, которые можно обнулить, но они не могут быть обнулены в вашем классе, что приведет к ошибке.
2. Убедитесь, что вы позвонили в QueryUtils. Для заказа в коде используются те же типы, которые вы передали в тестовом коде.
3. @RenanFelipeFerreira Это не удается, когда он устанавливает when(…).thenreturn() в тесте на этапе упорядочения. Он получает исключение с нулевым указателем, а не при действии.
Ответ №1:
Проблема здесь в том, что Mockito не может использовать язык Java.
В when(mockedObject.mockedMethod()).thenReturn()
форме выполняется метод mocked, и его возвращаемое значение передается в макет, где Mockito обменивает его на настроенное значение. Но издевательский объект инициализируется с null
помощью s, поэтому любое свойство издевательского объекта, доступ к которому осуществляется в издевательском методе, вызывает NPE.
Чтобы прийти в себя, вы должны использовать скользящую менее читаемую форму doReturn().when(mockObject).mockedMethod()
.
пожалуйста, обратите внимание, что закрытие )
перенесено!
В этой форме Mockito полностью предотвращает выполнение издевательского метода с помощью полиморфизма и напрямую возвращает настроенное значение.