我正在尝试为 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/