[英]Why I get NullPointerException while mocking?
为什么会出现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);
}
}
运行测试时,出现以下异常:com.some.api.some.package.dao.SomeDao.getNextId(SomeDao.java:13)处的java.lang.NullPointerException ...
稍后,我想添加新的类进行模拟,并且将在其中一个内部调用getNextId方法。
谢谢!
MockitoAnnotations.initMocks(this)应该在JUnit中的测试方法之前执行
@Before public void initMocks() { MockitoAnnotations.initMocks(this); }
或者在TestNG中使用@BeforeMethod
必须调用
MockitoAnnotations.initMocks(this)
方法来初始化带注释的字段。在上面的示例中,在测试的基类的@Before(JUnit4)方法中调用了initMocks()。
使用@Spy时,不能使用when / thenReturn语法。
您必须使用doReturn / when语法。
另请参阅此帖子: Mockito-doReturn()和when()之间的区别
因此,将您的@Spy更改为@Mock或更改桩号都可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.