2014-12-26 102 views
-1

我有正在請求和發送響應和用於該方法創建JUnit測試用例的函數,但我無法嘲笑道。.getSessionFactory()的getCurrentSession()平齊();如何嘲笑Dao.getSessionFactory()。的getCurrentSession()。平齊()使用powermock和mokito

我的測試類:。

@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

注:我的罐子[R正確的,因爲我試圖與最終和靜態類演示的例子和測試是成功的,但這個項目的創建SessionFactory的模仿對象而不是會議。

+0

爲什麼你不能嘲笑它? –

+0

bcoz getCurrentSession()是最後的方法。 –

+0

這不是一個問題Powermock可以模擬最終方法就好了 –

回答

0

總之,不要這樣做。你正在創建一個非常脆弱的測試,但實際上並不能證明你想要它。你在嘲笑如何使用一個框架,它不能保證你的代碼是否真的可以工作。

對於這些類型的測試,你居然要往返於實際的數據庫,完全忘記了嘲諷。你可以在這裏儘可能多的嘲笑,你的代碼仍然不能工作

+0

但我的測試方法中包含業務邏輯和請求對象的一些驗證這就是爲什麼我測試的方法,但所產生的問題的唯一事情就是Dao.getSessionFactory()的getCurrentSession()的flush()。;這是第一級緩存,它的工作是清除舊值。並註釋行(Dao.getSessionFactory()。getCurrentSession()。flush();)我的測試用例運行成功。所以建議如何模擬它。 –