是否有可能使用mockito单一的虚空方法?

时间:2014-06-06 12:31:08

标签: java mockito

我想使用Mockito覆盖类的单个void方法的实现。其他方法应该是存根的。

我尝试了类似的东西,但是自java.lang.Void != void以来它没有编译:

MyObj obj = mock(MyObj.class);
doAnswer(new Answer<Void>() {
    @Override
    public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
        return null;
    }
}).when(obj.myMethod(any(String.class)));

没有&#34; doInvoke&#34;或类似的东西?

在模拟扩展类之前,我是否必须使用标准的Java类extend-and-override?

1 个答案:

答案 0 :(得分:2)

来自the documentation

  

Stubbing void需要与when(Object)不同的方法,因为编译器不喜欢括号内的void方法...

     

doThrow(Throwable)替换stubVoid(Object)方法来存留空洞。主要原因是提高了doAnswer()方法系列的可读性和一致性。

     

对于任何方法,您都可以使用doThrow()doAnswer()doNothing()doReturn()doCallRealMethod()代替与when()相对应的调用。

时有必要      
      
  • stub void methods
  •   
  • 间谍对象的存根方法(见下文)
  •   
  • 多次使用相同的方法,在测试过程中更改模拟的行为。
  •   
     

但是对于所有的存根调用,您可能更愿意使用这些方法代替when()的替代方法。

所以听起来你只是想要:

doAnswer(new Answer<Void>() {
    @Override
    public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
        return null;
    }
}).when(obj).myMethod(any(String.class));