2017-06-15 3559 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

相关问题