Почему я получаю исключение NullPointerException во время насмешки?

Почему я получаю исключение NullPointerException?

Вот мой код:

@Stateless
@LocalBean
class SomeDao {

@PersistenceContext(unitName = "some-value")
private EntityManager entityManager;

public EntityManager getEntityManager() {
    return this.entityManager;
}

public long getNextId() {
    long someLongValue = getEntityManager().someMethod();
    //some code
    return someLongValue;
}
}

class SomeTest() {
@Spy
private SomeDao dao = new SomeDao();

@Test
public void someTestMethod() {
    MockitoAnnotations.initMocks(this);
    when(dao.getNextId()).thenReturn(10L);
}
}

Когда я запускаю тест, я получаю следующее исключение: java.lang.NullPointerException в com.some.api.some.package.dao.SomeDao.getNextId(SomeDao.java:13) ...

Позже я хочу добавить в mock новые классы, и внутри одного из них будет вызываться метод getNextId.

Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
428
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

MockitoAnnotations.initMocks(это) должен выполняться перед тестовым методом в JUnit

  @Before public void initMocks() {
       MockitoAnnotations.initMocks(this);
   }

Или в TestNG используйте @BeforeMethod

MockitoAnnotations.initMocks(this) method has to called to initialize annotated fields.

In above example, initMocks() is called in @Before (JUnit4) method of test's base class.

Спасибо, но, к сожалению, это не решило проблему :( Я изменил аннотацию Spy на Mock, после чего это удалось.

pityo10000 28.01.2019 12:25
Ответ принят как подходящий

Когда вы используете @Spy, вы не можете использовать синтаксис when/thenReturn.

Вы должны использовать синтаксис doReturn/when.

Смотрите также этот пост: Mockito - разница между doReturn() и when()

Таким образом, либо изменение вашего @Spy на @Mock, либо изменение вашей заглушки решит проблему.

Спасибо! Я изменил аннотацию на Mock, и это решило проблему! :)

pityo10000 28.01.2019 12:23

Другие вопросы по теме