OCMock的文档非常清晰。我有特定的类级函数存根。这是一个请求,看起来像这样:
OCMStub([self.mockApiManager
requestToURL:[OCMArg any]
method:[OCMArg any]
keypath:[OCMArg any]
parameters:[OCMArg any]
objectClass:[OCMArg any]
shouldRetry:NO
retryBlock:nil
withCompletionBlock:([OCMArg invokeBlockWithArgs:@(1), @[@(apiRequestCount)], requestOperation, [[NSError alloc] init], @(0), nil])])._andDo(^(NSInvocation *invocation) {
apiRequestCount++;
});
我感兴趣的部分是[OCMArg invokeBlockWithArgs:@(1), @[@(apiRequestCount)], requestOperation, [[NSError alloc] init], @(0), nil]
。特别是我传入apiRequestCount的地方。
apiRequestCount是我的测试类上的静态int。我希望每次调用-requestToURL:metho...
函数/存根时都传回一个递增的值。所以调用一次,然后返回0.再次调用它,返回1.等等。
然而,尽管这个函数获得了3次存根,但我获得了invokeBlockWithArgs的0。谁能想到解决这个问题的方法呢?
答案 0 :(得分:1)
在创建存根并在invokeBlockWithArgs
上调用OCMArg
方法时,将获取所有参数(包括apiRequestCount
)并将其保存在幕后的对象中。对apiRequestCount
的进一步更新不会更新该内部状态,因此使用与最初提供的值相同的方式调用该块。
尽管如此,invokeBlock
方法只是为了方便。在您的情况下,您可以传递[OCMArg any]
作为block参数以确保存根匹配。然后,在传递给andDo
的块中,您可以从NSInvocation
中提取完成处理程序块,并使用正确的值调用它。