我在一个类中有两个方法,其中一个方法只使用特定参数调用另一个方法。方法如下:
-(void)loadAllFollowersForUser:(NSUInteger)userID withResponseHandler:(_Nullable CompletionHandler)handler {
[self loadFollowersForUser:userID
fromOffSet:0
toLimit:100000
withResponseHandler:handler];
}
-(void)loadFollowersForUser:(NSUInteger)userID fromOffSet:(NSInteger)offset toLimit:(NSInteger)limit withResponseHandler:(_Nullable CompletionHandler)handler {
NSLog(@"Actual loadFollowersForUser method got called!");
}
我正在试用TDD并且一直在使用OCMock。我有以下测试,只是测试loadAllFollowers在内部调用另一个方法
- (void)testLoadAllFollowersCallsLoadFollowers {
id partialMockSUT = OCMPartialMock(self.sut);
OCMExpect([partialMockSUT loadFollowersForUser:[OCMArg any]
fromOffSet:[OCMArg any]
toLimit:[OCMArg any]
withResponseHandler:[OCMArg any]]);
[partialMockSUT loadAllFollowersForUser:123
withResponseHandler:^(BOOL success, id response, NSError *error) {
}];
OCMVerifyAll(partialMockParser);
}
我正在使用部分模拟因为我只想存根loadFollowersForUser方法并调用loadAllFollowers方法的实际实现。这几乎完全是这样,但我的测试总是无法满足期望,我在控制台中看到了NSLog。
我尝试过的事情:
答案 0 :(得分:3)
根据the OCMock docs,[OCMArg any]
占位符仅传递“对象,指针和选择器”。
这里的问题可能是该方法存在标量参数,因此期望失败。文档建议通过调用ignoringNonObjectArgs
来存储方法来处理标量参数的变通方法。这可能看起来像:
OCMExpect([[partialMockSUT ignoringNonObjectArgs]
loadFollowersForUser:[OCMArg any]
fromOffSet:0 // or any value
toLimit:0 // or any value
withResponseHandler:[OCMArg any]]);
不是100%肯定,因为我自己没有尝试过。