OCMock:OCMPartialMock 对象调用实际方法而不是存根
OCMock: OCMPartialMock object calls the actual method rather than the stub
我在 class 中有 2 个方法,其中一个只是使用特定参数调用另一个。方法如下:
-(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。
我尝试过的事情:
- 我尝试添加其他临时方法来验证 parital mocks 的行为,它们的表现完全符合预期
- This 问题表明我正在尝试做的事情应该很有可能
- 我尝试在 OCMExpect 与 OCMock 文档内联之后为该方法添加 OCMStub。参见 this page
上的 10.2
我不确定是传入的块有问题,还是方法 return 类型无效,我没有针对预期采取任何行动。
根据the OCMock docs,[OCMArg any]
占位符仅通过"objects, pointers and selectors".
这里的问题可能是方法有标量参数,所以预期失败了。文档建议通过调用 ignoringNonObjectArgs
存根方法来处理标量参数。所以这可能看起来像:
OCMExpect([[partialMockSUT ignoringNonObjectArgs]
loadFollowersForUser:[OCMArg any]
fromOffSet:0 // or any value
toLimit:0 // or any value
withResponseHandler:[OCMArg any]]);
不是 100% 确定,因为我自己没有尝试过。
我在 class 中有 2 个方法,其中一个只是使用特定参数调用另一个。方法如下:
-(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。
我尝试过的事情:
- 我尝试添加其他临时方法来验证 parital mocks 的行为,它们的表现完全符合预期
- This 问题表明我正在尝试做的事情应该很有可能
- 我尝试在 OCMExpect 与 OCMock 文档内联之后为该方法添加 OCMStub。参见 this page 上的 10.2
我不确定是传入的块有问题,还是方法 return 类型无效,我没有针对预期采取任何行动。
根据the OCMock docs,[OCMArg any]
占位符仅通过"objects, pointers and selectors".
这里的问题可能是方法有标量参数,所以预期失败了。文档建议通过调用 ignoringNonObjectArgs
存根方法来处理标量参数。所以这可能看起来像:
OCMExpect([[partialMockSUT ignoringNonObjectArgs]
loadFollowersForUser:[OCMArg any]
fromOffSet:0 // or any value
toLimit:0 // or any value
withResponseHandler:[OCMArg any]]);
不是 100% 确定,因为我自己没有尝试过。