Почему я получаю исключение 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.
Спасибо!




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, вы не можете использовать синтаксис when/thenReturn.
Вы должны использовать синтаксис doReturn/when.
Смотрите также этот пост: Mockito - разница между doReturn() и when()
Таким образом, либо изменение вашего @Spy на @Mock, либо изменение вашей заглушки решит проблему.
Спасибо! Я изменил аннотацию на Mock, и это решило проблему! :)
Спасибо, но, к сожалению, это не решило проблему :( Я изменил аннотацию Spy на Mock, после чего это удалось.