EasyMock.andVoid()的目的是什么?

时间:2017-10-05 12:11:04

标签: java easymock

EasyMock.andVoid()的javadoc读取如下

  

记录一个电话,但什么都不返回。用于链接对void方法的调用expectLastCall()。和Throw(e).andVoid()

     

返回

     

此对象允许方法调用chaining.lockquote

你知道任何一个人需要这种情况吗?在上面的例子中andVoid()的目的是什么?

让我们考虑一下:

myMock.myMethod();
expectLastCall().andVoid().andThrow(e)

myMethod的返回类型为void。然后我们可以省略'chain-element'andVoid

2 个答案:

答案 0 :(得分:0)

related API docs是这样的:

  

记录一个电话,但什么都不返回。用于在void上链接调用   方法expectLastCall()。andThrow(e).andVoid()

重点是记录一个电话。稍后verify来电可以检查此来电是否已经发生。

答案 1 :(得分:0)

你真的很少需要它。因为在大多数情况下,您只需要调用void方法来模拟它。喜欢这个

MyClass myMock = mock(MyClass.class);
myMock.myMethod();
replay(myMock);
myMock.myMethod(); // one call to myMethod expected
verify(myMock);

这是

的同义词
MyClass myMock = mock(MyClass.class);
myMock.myMethod();
expectLastCall();
replay(myMock);
myMock.myMethod(); // one call to myMethod expected
verify(myMock);

然后假设您希望第一次调用myMethod抛出异常而第二次调用正常,您可以这样做。

MyClass myMock = mock(MyClass.class);
myMock.myMethod();
expectLastCall().andThrow(new RuntimeException("test"));
expectLastCall().andVoid();
replay(myMock);
try {
  myMock.myMethod(); // one call to myMethod will throw an exception
  fail("should throw");
} catch(RuntimeException e) {}
myMock.myMethod(); // the other will be normal
verify(myMock);

或通过链接他们

MyClass myMock = mock(MyClass.class);
myMock.myMethod();
expectLastCall().andThrow(new RuntimeException("test")).andVoid();
replay(myMock);
try {
  myMock.myMethod(); // one call to myMethod will throw an exception
  fail("should throw");
} catch(RuntimeException e) {}
myMock.myMethod(); // the other will be normal
verify(myMock);

这个用例当然非常罕见,但我们仍然支持它。

相关问题