繁体   English   中英

为什么在嘲笑时得到NullPointerException?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM