Получение исключения NullPointerException попытка простого примера частичного издевательства с помощью Mockito

#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());
    }
}