为什么我在模拟时得到 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);
}
}
当我 运行 测试时,我得到以下异常:
java.lang.NullPointerException
在 com.some.api.some.package.dao.SomeDao.getNextId(SomeDao.java:13)
...
稍后我想添加新的 类 到 mock,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.
当您使用@Spy 时,您不能使用when/thenReturn 语法。
您必须使用 doReturn/when 语法。
另请参阅此 post:Mockito - difference between doReturn() and when()
因此,将您的@Spy 更改为@Mock 或更改您的存根,将解决问题。
为什么会出现 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(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.
当您使用@Spy 时,您不能使用when/thenReturn 语法。
您必须使用 doReturn/when 语法。
另请参阅此 post:Mockito - difference between doReturn() and when()
因此,将您的@Spy 更改为@Mock 或更改您的存根,将解决问题。