【问题标题】:Null pointer exception while doing unit testing using Mockito使用 Mockito 进行单元测试时出现空指针异常
【发布时间】:2017-11-17 19:50:59
【问题描述】:

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

【问题讨论】:

  • 代码究竟在哪里抛出了一个空指针?

标签: spring-mvc mockito junit4 dao


【解决方案1】:

首先,我强烈推荐给你,看看[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

【讨论】:

    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多