【发布时间】:2018-10-30 13:55:33
【问题描述】:
我是 JUnit 和 Mockito 的新手,我想在我的 DAO 测试类中模拟我的 SessionFactory,这就是我进行的方式:
@RunWith(MockitoJUnitRunner.class)
public class TodoDaoTest {
@Mock
SessionFactory sessionFactory;
@InjectMocks
TodoDao todoDao;
@Mock
Session session;
@Mock
Query query;
@BeforeClass
public static void setUpClass(){
}
@Before
public void setUp(){
Mockito.when(query.setParameter(any(int.class), any(Object.class))).thenReturn(query);
Mockito.when(session.createQuery(any(String.class))).thenReturn(query);
Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
MockitoAnnotations.initMocks(this);
}
@Test
public void getTodosByUserIdShouldNotReturnNull(){
User user = new User();
assertNotNull(todoDao.getTodosByUserId(user.getId()));
}
}
这是我的 DAO 类
@Component
@Transactional
public class TodoDao implements ITodoDao {
@Autowired
private SessionFactory sessionFactory;
@Override
@PostFilter("filterObject.userByUserId == authenticationFacade.getAuthenticatedFacade()")
public List<Todo> getTodosByUserId(int userId) {
List todos;
todos = sessionFactory.getCurrentSession().createQuery("from Todo where userId = ?").setParameter(0, userId).list();
return todos;
}
}
但是当我运行测试时出现java.lang.NullPointerException 异常,nullPointerException 位于todos = sessionFactory.getCurrentSession().createQuery(...) 行的级别
【问题讨论】:
标签: java unit-testing junit mockito