适当使用Mockito.reset()



来自Mockito.reset()文档:

Smart Mockito用户几乎不使用此功能,因为他们知道这可能是测试不佳的迹象。通常,您不需要重置mock,只需为每个测试方法创建新的mock即可。请考虑在冗长、过度指定的测试中编写简单、小而集中的测试方法,而不是reset()。

我有一个从前端调用的servicemethod,唯一的参数是包含3个布尔值的DTO,我们称它们为abc:

public void executeService(AbcDTO dto) { (...) }

根据布尔值的不同,服务调用aManager.a()bManager.b()cManager.c()。事实上,我可以用3种不同的服务方法来实现这一点,但我宁愿不这样做。

我想对布尔值abc的每一个可能的组合进行单元测试,所以我写了这样的东西:

@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()的正确、可接受的使用吗?还是我应该进行单独的测试?

您可能想尝试使用参数化测试或zohhak框架,以便为布尔值的每个组合都有一个测试运行。在这种情况下,没有必要重置mock。

如果使用TestNG,您可能需要了解DataProviders。下面是一个很好的例子:https://www.toolsqa.com/testng/testng-dataproviders/

相关内容

  • 没有找到相关文章

最新更新