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" 存根,找出问题所在将非常困难,例如如果存根的第一次调用没有发生,那么第二次调用将获得第一次调用的值。
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" 存根,找出问题所在将非常困难,例如如果存根的第一次调用没有发生,那么第二次调用将获得第一次调用的值。