OCMock - verifying order of method calls. Is there any other way?

三世轮回 提交于 2019-12-22 05:28:14

问题


When I want to verify that in one method a mock object is receiving some messages in a particular order I do something like this:

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

Is there any cleaner/better way of doing this? Thanks in advance.


回答1:


You can use setExpectationOrderMatters

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

[sut methodToTest];

[myMock verify];



回答2:


That looks pretty clean to me. If you're not happy nesting, you could introduce a block variable.

__block BOOL hasCalledA;

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

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

You solution looks fine though.

As a side note, I think this question might be better suited for https://codereview.stackexchange.com/ although I'm still wrapping my head around that site.



来源:https://stackoverflow.com/questions/16196571/ocmock-verifying-order-of-method-calls-is-there-any-other-way

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!