OCMock 和覆盖存根值

OCMock and overriding stub value

mockModule = OCMPartialMock(module);
OCMStub([mockModule send:@"FOO"]).andReturn(YES);
OCMStub([mockModule send:@"FOO"]).andReturn(NO);

在这个例子中,我有一个简单的模拟模块,当我发送一个字符串时,我将一些存根设置为 return YES/NO,出现的问题是如果我将相同的字符串设置两次只有 return 是第一个值,而不是新值。

在这个关于问题的示例中,我希望这样的调用:

BOOL answer = [module send:@"FOO"]
//answer should be NO, but is YES

如何让它响应最近设置的值?

您可以使用 expect 方法,例如

mockModule = OCMPartialMock(module); OCMExpect([mockModule send:@"FOO"]).andReturn(YES); OCMStub([mockModule send:@"FOO"]).andReturn(NO);

这不完全是它们的本意,但确实有一定道理。你基本上是说,我希望 send: 会被调用,当它实际发生时,我希望该方法被存根。

此外,如果可以 "pile up" 存根,找出问题所在将非常困难,例如如果存根的第一次调用没有发生,那么第二次调用将获得第一次调用的值。