当前位置: 首页 > 知识库问答 >
问题:

java、mock的单元测试,在某个测试方法里,能否对同一个mock的方法做不同的操作?

凌展
2023-05-11

1、后端开发代码
public void methodA(){

.......
.......
try {
    mapper.insert(user);
} catch (Exception e) {
    logger.error();
    ......
}

}

2、测试方法代码
public void methodATest(){

Mockito.when(mapper.insert(Mockito.any())).thenReturn(1);
xxx.methodA();

Mockito.when(mapper.insert(Mockito.any())).thenThrow(RuntimeException.class);
xxx.methodA();
}

3、问题
我现在想要覆盖代码里try……catch……的内容(执行通过和执行失败)。

从现在写的代码来看好像不能在同个测试方法里,第二次调用methodA()会报一个奇怪、不应该出现的错。如果把测试方法拆成两个,一个测试通过,一个测试失败,就没问题。

请问mapper.insert() 这个mock能否在同个测试方法里打两次或以上?如果可以要怎么写,如果不行,那是在方法里每次走到if判断或者try catch块,都单独写个方法出来验证吗?求指教谢谢。

共有1个答案

鲍国兴
2023-05-11
@Test
public void methodATest() {
    // 第一次
    Mockito.doReturn(1).when(mapper).insert(Mockito.any());
    xxx.methodA();

    // 清除记录
    Mockito.clearInvocations(mapper);

    // 第二次
    Mockito.doThrow(new RuntimeException("Insert failed")).when(mapper).insert(Mockito.any());
    xxx.methodA();

    // 验证
}
 类似资料:
  • 我有这两种方法,在使用Mock实现测试时遇到了困难。我该如何参加考试? 我有麻烦得到Jboss目录而不必启动System.get属性(jboss.server.temp.dir);

  • 我有一个测试类,其中我有大约10个单元测试用例。在本文中,我创建了一个mock方法,它只在10个测试用例中的2个中有用。 因此,从技术上讲,我希望对8个测试用例执行方法,并对其中2个测试用例进行模拟。 有没有办法做到这一点?

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT

  • 我正在尝试使用Mockito在SprinBoot应用程序中进行一些jUnit测试。 现在我的服务有了一些变量,可以从通过注释: 我试图通过像这样使用来测试这个: 但是,该属性不会被填充,并保持为。 这方面有很多TPOIC,但我还没能拼凑出一个解决方案。我看到解决方案建议,但它似乎想做一个集成测试,使服务加速,但由于无法连接到数据库,服务失败了。所以这不是我想要的。 我还看到一些解决方案建议我制作一

  • 我们有一个基于Spring的JUnit测试类,它利用一个内部测试上下文配置类 最近,服务类中引入了新的功能,相关测试应添加到ServiceTest中。但是,这也需要创建不同的测试上下文配置类(现有配置类的内部结构相当复杂,如果可能的话,将其更改为既服务于旧测试又服务于新测试似乎非常困难) 有没有一种方法可以实现一个测试类中的某些测试方法将使用一个配置类,而其他方法将使用另一个?似乎只适用于类级别,

  • 我在我的服务层有一个方法: [1]这一行获取条形码,比如然后调用另一个类中的一个方法,该方法从数据库中检索有关该项目的信息,执行计算并返回价格。可能的值可以类似于。 [2]按价格对所有值进行升序排序。因此,如果列表包含和和,则将其排序为和。 当我尝试测试此方法时,当调用时,我得到空指针异常。我如何测试这个方法?我试着搜索并找到了一些关于使用mockito的问题和答案,但我不知道如何实现它。 我目前