7

あるメソッドでモック オブジェクトが特定の順序でメッセージを受信して​​いることを確認したい場合は、次のようにします。

// 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];

これを行うためのよりクリーンな/より良い方法はありますか? 前もって感謝します。

4

2 に答える 2

15

使用できますsetExpectationOrderMatters

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

[sut methodToTest];

[myMock verify];
于 2013-04-26T20:13:20.200 に答える
2

それは私にはかなりきれいに見えます。ネストに満足できない場合は、ブロック変数を導入できます。

__block BOOL hasCalledA;

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

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

あなたのソリューションはうまく見えます。

補足として、この質問はhttps://codereview.stackexchange.com/に適していると思いますが、まだそのサイトについて頭を悩ませています。

于 2013-04-24T18:58:06.520 に答える