2017-09-04 85 views
1

我有数倍BarService相关重载update方法就可以了,就像这样:如何使用Mockito来验证是否有一组重载方法被调用?

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

我想,以确保他们的没有被称为在一个特定的测试。目前,我这样做:

@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在这里做我想做的事?基本上,要检查重载的方法是否被调用,而不考虑其参数?

回答

1

你绝对做不手动挂上“检验规范”是名单未使用(如此规模这里暗示)方法。当你明天添加一个新方法会发生什么?然后,你将不得不转向所有的测试,并在那里添加新的方法。那是不是一种可持续的模式!

相反:

  • 验证这些调用你打算发生
  • ,然后调用verifyNoMorInteractions()你的模拟对象上,以确保良好,没有其他的方法被称为
+0

这是一个可行的选择,但不幸的是,它污染了我的测试与一堆我不想要的东西。让我们说'barService'在调用'update'之前做'X'和'Y'。现在我必须在调用'verifyNoMoreInteractions(barService)'之前明确'验证(barService).doX'和'验证(barService).doY'。但在这个测试中,我实际上并不知道或关心'doX'和'doY',所以他们只是分心。 – Sasgorilla

1

如果酒吧是一个模拟和你想绝对没有互动,你可以使用Mockito的verifyZeroInteractions方法如下;

Mockito.verifyZeroInteractions(bar); 
+0

这将工作,但不幸的是,我不能指望有零交互;我只是想确保没有调用'update'方法。 – Sasgorilla

相关问题