使用Mockito进行单元测试时出现空指针异常

时间:2017-06-15 10:43:22

标签: spring-mvc mockito junit4 dao

我是Mockito的新人。我正在编写SomeDaoImplclass

的单元测试用例

这是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);
}

1 个答案:

答案 0 :(得分:0)

首先,我强烈建议你看一下[1](但要小心使用正确的版本

其次,你确实犯了一些初步错误。

  1. 你想测试grViz(generate_dot(mygraph2)) 但是你正在创建一个模拟,所以你并没有真正测试这个类

  2. 我不知道您是否使用SomeDaoImplClass,但根据您的代码和实现,我假设没有。因此,您需要MockitoJUnitRunner或使用MockitoAnnotations.initMocks(this)

  3. 你正在使用静态getter和setter来设置你的“DaoImplClass”和其他所需的类,我不知道你的实现,但我很确定,它应该是

    JUnitRule

    而不是

    someDaoImplClass.setDataSource(daraSource);
    
  4. 你的测试目前似乎没有意义,你想测试什么?你的目标是什么?在提问时你绝对应该提供更多的背景信息,并在发布

  5. 之前检查你的整个“问题”

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