java - 为什么我在模拟时会收到 NullPointerException?

标签 java testing mockito spy

为什么我会收到 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 方法将在其中一个类中调用。

谢谢!

最佳答案

MockitoAnnotations.initMocks(this)在 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.

关于java - 为什么我在模拟时会收到 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399846/

相关文章:

c# - 如何在Unity中测试方法包括异步方法

java - 使用 Mockito 测试 @Postconstruct

java - 如何以编程方式使用 Java 客户端创建和发布索引

java - MongoDB 通过 $in 命令获取匹配数

python - 测试函数在 python 中返回可迭代

java - Mockito ArgumentMatcher 说参数不同

java - 使用 Mockito 将参数模拟对象转换为另一个对象

java - Intellij 警告 - 通用未经检查的分配

java - 当对象具有更改器(mutator)时,有没有办法在 java 中创建不可变对象(immutable对象)?

java - 如何在 java 中模拟服务器关闭/可用?