2013-04-24 70 views
6

當我想驗證一個方法的模擬對象是在一個特定的順序接收的一些消息我做這樣的事情:OCMock - 驗證方法調用的順序。有沒有其他方法?

// sut is an instance of the class I am testing and myMock is a mock object injected in sut. 
// I want to test that myMock sends messageA and then messageB, in that particular order. 
[[[myMock expect] andDo:^(NSInvocation *invocation) 
    { 
     [[myMock expect] messageB]; 
    }] 
messageA]; 

[sut methodToTest]; 

[myMock verify]; 

是否有這樣做的任何清潔劑/更好的辦法? 在此先感謝。

回答

15

您可以使用setExpectationOrderMatters

[myMock setExpectationOrderMatters:YES]; 
[[myMock expect] messageA]; 
[[myMock expect] messageB]; 

[sut methodToTest]; 

[myMock verify]; 
+0

好找到閱讀!在你的答案(messageA然後messageB)小錯字。 – 2013-04-26 20:18:31

+0

Thx,錯字固定 – 2013-04-27 18:41:52

2

這對我來說看起來很乾淨。如果你不喜歡嵌套,你可以引入一個塊變量。

__block BOOL hasCalledA; 

[[[myMock expect] andDo:^(NSInvocation *invocation) { 
    hasCalledA = YES; 
    }] messageA]; 

[[[myMock expect] andDo:^(NSInvocation *invocation) { 
    STAssertTrue(hasCalledA); 
    }] messageB]; 

雖然你的解決方案看起來不錯。

作爲一個方面說明,我認爲這個問題可能更適合於https://codereview.stackexchange.com/,儘管我仍然在圍繞着該網站。

+0

+1我覺得這是很容易,OP的解決方案 – 2013-04-26 20:09:23