2017-10-05 138 views
1

的Javadoc EasyMock.andVoid()阅读的如下EasyMock.andVoid()的目的是什么?

录制一个呼叫,但没有返回。 。用于对空方法调用链expectLastCall()andThrow(E).andVoid()

返回

这个对象允许方法调用chaining.lockquote

你知道任何可能出现这种情况?上例中andVoid()的用途是什么?

让我们考虑:具有返回类型void

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

随着myMethod。然后我们可以忽略'链元素'andVoid

回答

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); 

这个用例当然是超级罕见的,但我们仍然支持它。

+0

只是一个小小的评论:而不是'expectLastCall()。andVoid();'人们可以写'myMock.myMethod();'。因此,'.andVoid()'的使用不一定需要。 – Chris311

+0

@ Chris311是的。我知道。它更多的是为了完成。如果你喜欢链接期望。 – Henri

0

related API docs是这样的:

录制一个呼叫,但没有返回。用于对空 方法调用链expectLastCall()。andThrow(E).andVoid()

关键是要录制通话内容。稍后,verify呼叫可以检查这个呼叫是否发生。