Почему я получаю NullPointerException во время насмешки? - PullRequest
0 голосов
/ 28 января 2019

Почему я получаю 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) ...

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 января 2019

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

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

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

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

0 голосов
/ 28 января 2019

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

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

Или в TestNG использовать @BeforeMethod

MockitoAnnotations.initMocks(this) метод должен вызываться для инициализации аннотированных полей.

В приведенном выше примере initMocks () вызывается в методе @Before (JUnit4) базового класса теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...