Java 在createCriteria中测试DAO的Mockito获取NullPointerException

Java 在createCriteria中测试DAO的Mockito获取NullPointerException,java,mockito,Java,Mockito,我正在尝试为dao层编写测试。我从hibernate开始工作,当我尝试测试我的方法getAll时,我在createCriteria的行中得到异常NullPointerException,我不知道如何解决这个问题 这是我的例外: java.lang.NullPointerException at dao.UserDaoTest.testFindAll(UserDaoTest.java:69) 这是我的测试课: @Mock private SessionFactory sessionFac

我正在尝试为dao层编写测试。我从hibernate开始工作,当我尝试测试我的方法
getAll
时,我在
createCriteria
的行中得到异常
NullPointerException
,我不知道如何解决这个问题

这是我的例外:

java.lang.NullPointerException
    at dao.UserDaoTest.testFindAll(UserDaoTest.java:69)
这是我的测试课:

@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));
}
@Mock
私人会话工厂会话工厂;
@嘲弄
非公开会议;
@嘲弄
私人交易;
@注射模拟
私有UserDaoImpl userDao;
私人用户;
@以前
public void setUpUser(){
user=新用户();
user.setName(“is name”);
当(sessionFactory.openSession())。然后返回(session);
当(session.beginTransaction())。然后返回(事务);
}
@试验
公共void testFindAll(){
List userList=new ArrayList();
添加(用户);
当(session.createCriteria(User.class.list()).thenReturn(userList);//NullPointerException
List userList1=userDao.findAll();
资产(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;
}
私有会话;
私人交易;
公共列表findAll(){
List userList=null;
session=sessionFactory.openSession();
事务=空;
试一试{
事务=session.beginTransaction();
userList=session.createCriteria(User.class.list();
commit();
}捕获(休眠异常e){
if(事务!=null){
transaction.rollback();
}
e、 printStackTrace();
}最后{
session.close();
}
返回用户列表;
}

在testFindAll()中尝试类似的方法


您必须存根
createCriteria
才能返回某些内容。然后您必须将该内容存根以返回
列表
。没有捷径。@SotiriosDelimanolis,我需要在DAO类中为存根创建字段条件吗?
Criteria aCriteria = Mockito.mock(Criteria.class);
when(session.createCriteria(User.class)).thenReturn(aCriteria);
when(aCriteria.list()).thenReturn(userList);