[英]NullPointerException when mocking a QueryBuilder
问题:
我正在尝试使用 Mockito 创建一个测试。 此测试模拟 QueryBuilder 并尝试验证一切是否正常。 但我得到了"java.lang.NullPointerException" 。 似乎某些东西尚未初始化,但我看不到它是什么。
代码:
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class AcademicJPADAOTest {
@Mock
private EntityManager entityManager;
@Mock
private CriteriaBuilder cb;
@Mock
private CriteriaQuery<Academic> cq;
@Mock
private Root<Academic> root;
@InjectMocks
AcademicJPADAO academicjpadao;
private String passwdcode = "83997689-22b6-4a7e-a801";
@Test
public void retrieveByPasswordCodeTest() throws PersistentObjectNotFoundException, MultiplePersistentObjectsFoundException {
Academic academic = new Academic();
when(entityManager.getCriteriaBuilder()).thenReturn(cb);
when(cb.createQuery(Academic.class)).thenReturn(cq);
when(cq.from(Academic.class)).thenReturn(root);
when(cq.where(cb.equal(root.get(Academic_.passwordCode), passwdcode))).thenReturn(cq);
when(academicjpadao.getEntityManager().createQuery(cq).getSingleResult()).thenReturn(academic);
academicjpadao.retrieveByPasswordCode(passwdcode);
verify(entityManager, times(1)).getCriteriaBuilder();
}
}
线路错误:
when(academicjpadao.getEntityManager().createQuery(cq).getSingleResult()).thenReturn(academic);
也许您的academicjpadao
在这部分没有正确注入:
@InjectMocks
AcademicJPADAO academicjpadao;
所以使用MockitoAnnotations.initMocks
来启动@Mock
和@InjectMocks
对象。所以你必须添加到你的 class 这个方法:
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.