如何使用powermock和mokito模拟Dao.getSessionFactory()。getCurrentSession()。flush()

时间:2014-12-26 07:15:36

标签: java-ee junit powermock

我有一个函数正在接收请求并发送响应并为该方法创建Junit测试用例但我无法模拟Dao.getSessionFactory()。getCurrentSession()。flush();

我的测试班:

@RunWith(PowerMockRunner.class)
@PrepareForTest({SessionFactory.class,Session.class})

public class ClassNameTest{
     private ClassName className;
     private ServiceDao mockServiceDao = mock(ServiceDaoImpl.class);

     @Test 
     public void testAbc() { 
          SessionFactory mockSessionFactory=PowerMockito.mock(SessionFactory.class);
          Session mockedSession= PowerMockito.mock(Session.class);
          mockServiceDao.setSessionFactory(mockSessionFactory);
          Mockito.when(mockSessionFactory.getCurrentSession()).thenReturn(mockedSession);

          ---rest of the code---
     }

同时调试它在mDao.getSessionFactory()中抛出异常.getCurrentSession()。flush(); 引起:java.lang.NullPointerException

注意:我的jar正确,因为我尝试了最终和静态类的演示示例,测试成功但是对于这个项目,它为Sessionfactory创建了模拟对象,但没有为session创建。

1 个答案:

答案 0 :(得分:0)

简而言之,不要这样做。你正在创建一个非常脆弱的测试,实际上并没有证明你想要它。你正在嘲笑如何使用一个框架,它不能保证你的代码是否真的有效。

对于这些类型的测试,您实际上想要往返于实际的数据库并完全忘记模拟。你可以在这里尽可能多地进行模拟,你的代码仍然无法正常工作