2017-10-05 135 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呼叫可以檢查這個呼叫是否發生。