java-正确使用Mockito.reset()?

从Mockito.reset()文档中:

Smart Mockito users hardly use this feature because they know it could be a sign of poor tests. Normally, you don’t need to reset your mocks, just create new mocks for each test method.
Instead of reset() please consider writing simple, small and focused test methods over lengthy, over-specified tests.

我有从前端调用的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()的正确,可接受的用法,还是应该单独进行测试?

解决方法:

您可能想要尝试使用parameterized teststhe zohhak framework,以便对每种布尔值组合进行1次测试.在这种情况下,无需重置模拟.

上一篇:android-在JUnit4和Mockito中编写SQLiteOpenHelper测试用例


下一篇:将Java Mockito测试转换为Kotlin