Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否正确使用Mockito.reset()?_Java_Unit Testing_Mockito - Fatal编程技术网

Java 是否正确使用Mockito.reset()?

Java 是否正确使用Mockito.reset()?,java,unit-testing,mockito,Java,Unit Testing,Mockito,从Mockito.reset()文档: 聪明的Mockito用户很少使用此功能,因为他们知道这可能是测试不好的迹象。通常,您不需要重置模拟,只需为每个测试方法创建新的模拟即可。 代替ReSET(),请考虑编写简单的、小的和集中的测试方法来处理冗长的、过度指定的测试。 我有一个从前端调用的servicemethod,其中一个DTO包含3个布尔值作为唯一的参数-让我们称它们为a,b和c: public void executeService(AbcDTO dto) { (...) } 根据布尔值,

Mockito.reset()
文档:

聪明的Mockito用户很少使用此功能,因为他们知道这可能是测试不好的迹象。通常,您不需要重置模拟,只需为每个测试方法创建新的模拟即可。 代替ReSET(),请考虑编写简单的、小的和集中的测试方法来处理冗长的、过度指定的测试。

我有一个从前端调用的servicemethod,其中一个DTO包含3个布尔值作为唯一的参数-让我们称它们为
a
b
c

public void executeService(AbcDTO dto) { (...) }
根据布尔值,服务然后调用
aManager.a()
bManager.b()
cManager.c()
。事实上,我可以用3种不同的服务方法来实现这一点,但我不愿意

我想对布尔值
a
b
c
的所有可能组合进行单元测试,所以我写了如下内容:

@Test
public void testABC() {
    // Mock aManager, bManager, cManager
    for(boolean a : asSet(true, false)) {
        for(boolean b : asSet(true, false)) {
            for(boolean c : asSet(true, false)) {
                AbcDTO dto = new AbcDTO(a, b, c);

                service.executeService(dto);

                verify(aManager, times(a ? 1 : 0)).a();
                verify(bManager, times(b ? 1 : 0)).b();
                verify(cManager, times(c ? 1 : 0)).c();
                reset(aManager, bManager, cManager);
            }
        }
    }
}
我认为这是一个测试,它清楚地表明了
executeService
对未来读者的用途,但它只在
Mockito.reset()
中以绿色运行。在阅读了文档之后,我不确定这是否是一种方法

我相信我有两个选择:

  • 使用
    Mockito.reset()
  • 为每个组合编写单独的单元测试(因此有8个测试和大量的复制粘贴)
问题:

这是正确的、可接受的Mockito.reset(),还是我应该进行单独的测试?

您可能希望尝试使用或,以便对每个布尔值组合运行一次测试。在这种情况下,无需重置模拟。

如果使用TestNG,您可能需要查看数据提供程序。
这里有一个很好的例子:

您可以将内容放在helper方法中的循环体中,该方法还负责创建模拟。