#java #unit-testing #mockito
Вопрос:
Я пытаюсь реализовать простой пример частичного издевательства. Выполняя приведенный ниже тест, я продолжаю получать NullPointerException
функцию ERDP.my в первой строке метода. Есть идеи, почему?
public class ErdpTest{
private Erdp erdp = null;
@Before
public void setUp() throws Exception {
erdp = mock(Erdp.class);
}
@Test
public void testMyFunctionTrue() {
when(erdp.myFunction()).thenCallRealMethod();
assertTrue(erdp.myFunction());
}
}
Комментарии:
1. Меня больше беспокоит тот факт, что
private ERDPerdp = null;
компилируется.2. Что ты имеешь в виду?
3. Я имею в виду, что эта строка синтаксически некорректна. Даже после вашего редактирования.
4. добавьте над тестовым классом
@RunWith(MockitoJUnitRunner.class)
5. Извините, я надеюсь, что теперь это синтаксически корректно.
Ответ №1:
Используйте spy
для частичного издевательства. Вот какой-то код:
erdp = spy(new Erdp.class);
Вы можете имитировать методы в a с spy
помощью тех же методов, которые вы используете для моделирования методов в a mock
.
Ключевое различие между a spy
и a mock
заключается в том, что макет-это просто прокси-сервер, и все методы по умолчанию возвращают значение null. С помощью шпиона все методы вызывают реальный метод.
Ответ №2:
Вы можете попробовать это :
public class ErdpTest {
private Erdp erdp = null;
@Before
public void setUp() {
erdp = mock(Erdp.class);
}
@Test
public void testMyFunctionTrue() {
doCallRealMethod().when(erdp).myFunction();
assertTrue(erdp.myFunction());
}
}