2017-06-15 62 views
-1

我是Mockito的新手。我寫單元測試用例SomeDaoImplclass使用Mockito進行單元測試時出現空指針異常

這是SomeDaoImplClass

@Override 
Public SomeModelClass retriveSomeDetails(int a,long b){ 
    return retrieveSomeDetails(a,b,Enum.Active) 
} 

這裏的方法是我的測試類

@Mock 
private SomeDaoImplClass someDaoImplClass 

@Mock 
private NamedParameterJdbcTemplate jdbcTemplate 

@Mock 
DataSource dataSource 

@Mock 
SomeDaoClass someDaoClass 

@Before 
Public void setUp() throws Exception { 
    someDaoImplClass = new SomeDaoImplClass(); 

    dataSource = Mockito.mock(DataSource.class); 
    jdbcTemplate = Mockito.mock(NamedParameterJdbcTemplate.class); 

    someDaoClass = Mockito.mock(SomeDaoClass.class); 

    SomeDaoImplClass.setDataSource(dataSource); 
    SomeDaoImplClass.setSomeDaoClass(someDaoClass); 
} 

@Test 
public void testSomeData(){ 
    Modelclass modelclass = new ModelClass(); 
    Mockito.when(SomeDaoClass.retriveSomeDetails(Mockito.anyInt(),Mockito.anyLong())).thenReturn(modelClass); 
    ModelClass object2 = SomeDaoImplClass.retriveSomeDetails(01,1000L,Class.Active); 
    Assert.assertEquals(01,1000L, object2); 
} 
+0

凡究竟代碼拋出一個空指針? – Nano

回答

0

首先,我強烈建議你,拿看看[1](但要小心使用正確的版本

第二你做一些初始錯誤。

  1. 要測試SomeDaoImplClass而是要創建一個模擬的,所以你並沒有真正測試的類

  2. 我不明白,如果你使用的是MockitoJUnitRunner,但根據您的代碼和實現,我不假設。所以,你需要MockitoAnnotations.initMocks(this)或使用JUnitRule

  3. 使用靜態getter和setter方法來設置你的「DaoImplClass」和其他所需的類,我不知道您的實現,但我確信,它應該是

    someDaoImplClass.setDataSource(daraSource); 
    

    代替

    SomeDaoImplClass.setDataSource(daraSource); 
    
  4. 測試似乎並沒有在此刻做出意義的,你要什麼測試?你的目標是什麼?提問的時候你一定要提供更多的背景,並在發佈前審閱你的整個「問題」

[1] http://static.javadoc.io/org.mockito/mockito-core/2.8.9/org/mockito/Mockito.html