如何使用Mockito验证是否调用了任何一组重载方法?

时间:2017-09-04 13:32:05

标签: java mockito

我有一个BarService,其上有多个相关的重载update方法,如下所示:

BarService#update(Bar bar);
BarService#update(Bar bar, boolean checkX);
BarService#update(Bar bar, boolean checkX, boolean checkY);

我想确保在特定测试中调用 none 。目前,我正在这样做:

@Test
public test doFoo_shouldNotUpdateBar() {
    setUpTest();
    doFoo();
    verify(barService, never()).update(any(Bar.class)));
    verify(barService, never()).update(any(Bar.class), anyBoolean()));
    verify(barService, never()).update(any(Bar.class), anyBoolean(), anyBoolean()));
    ...
}

我可以通过将所有verify调用移动到帮助器方法来检查所有重载版本来清理它:

@Test
public test doFoo_shouldNotUpdateBar() {
    setUpTest();
    doFoo();
    verifyBarServiceNeverUpdates(any(Bar.class));
}

但是有没有办法让Mockito在我这里做我想做的事情?基本上,检查是否调用了重载方法而不考虑其参数?

2 个答案:

答案 0 :(得分:1)

你绝对不要手动提出"验证规范" list 未使用的方法(按照此处隐含的规模)。明天添加新方法会发生什么?然后你必须转向所有测试并在那里添加新方法。那是一种可持续的模式!

相反:

  • 验证您打算发生的这些电话
  • 然后在模拟对象上调用verifyNoMorInteractions()以确保完好,没有其他方法被调用

答案 1 :(得分:1)

如果Bar是模拟而你想要绝对没有互动,你可以使用Mockito的verifyZeroInteractions方法,如下所示;

Mockito.verifyZeroInteractions(bar);