繁体   English   中英

当 mocking 为 QueryBuilder 时出现 NullPointerException

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

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