java - Mockito 在 createCriteria 中测试 DAO 得到 NullPointerException

标签 java mockito

我正在尝试为 dao 层编写测试。我在 hibernate 状态下工作,当我尝试测试我的方法 getAll 时,我在 createCriteria 行中收到异常 NullPointerException ,我不知道如何解决问题。

这是我的异常(exception):

java.lang.NullPointerException
    at dao.UserDaoTest.testFindAll(UserDaoTest.java:69)

这是我的测试类(class):

@Mock
private SessionFactory sessionFactory;
@Mock
private Session session;
@Mock
private Transaction transaction;
@InjectMocks
private UserDaoImpl userDao;

private User user;

@Before
public void setUpUser(){
    user = new User();
    user.setName("is name");
    when(sessionFactory.openSession()).thenReturn(session);
    when(session.beginTransaction()).thenReturn(transaction);
}
@Test
public void testFindAll(){
    List<User> userList = new ArrayList<>();
    userList.add(user);
    when(session.createCriteria(User.class).list()).thenReturn(userList); //NullPointerException
    List<User> userList1 = userDao.findAll();
    assertThat(userList1, is(userList));
}

这是 Dao 类:

private Session session;
private Transaction transaction;
public List<User> findAll() {
    List<User> userList = null;
    session = sessionFactory.openSession();
    transaction = null;
    try{
        transaction = session.beginTransaction();
        userList = session.createCriteria(User.class).list();
        transaction.commit();
    }catch (HibernateException e) {
        if (transaction!=null) {
            transaction.rollback();
        }
        e.printStackTrace();
    }finally {
        session.close();
    }
    return userList;
}

最佳答案

在 testFindAll() 中尝试类似的操作

Criteria aCriteria = Mockito.mock(Criteria.class);
when(session.createCriteria(User.class)).thenReturn(aCriteria);
when(aCriteria.list()).thenReturn(userList);

关于java - Mockito 在 createCriteria 中测试 DAO 得到 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32698322/

相关文章:

java - 无法在 Android 中的 URL 中发送阿拉伯字符

java - Java 浮点基元是否有任何 IEEE 754 标准实现?

java - 模拟系统类时的 Mockito + PowerMock LinkageError

java - libgdx 在触摸位置绘制图像

java - 通过NAT的P2P即时通讯

java - 为什么 thenCallRealMethod() 在这里丢失参数?

java - 我可以使用 Mockito 延迟 stub 方法响应吗?

java - 带有类型化 vararg 参数的 Mockito when 子句 - 使用 anyVararg 进行单元测试

Java:使用 jlibs 保证垃圾收集

java - 依赖常量值的单元测试代码