我有一个包含下一个方法的网络类:
- (void)fetchRecords {
Network * __weak weakSelf = self;
[self.sessionManager POST:@"" parameters:@{@"parameter":"param1"}
success:^(NSURLSessionDataTask *task, id responseObject) {
[weakSelf setRecordsWithLists:responseObject];
}
failure:nil];
}属性sessionManager
是AFHTTPSessionManager
类。我想测试我的网络通讯。我想检查是否成功执行了块然后调用了setRecordsWithLists:
方法。
我使用OCMock,用Google搜索并编写下一个测试代码:
- (void)tesNetworkSuccessExecuteSetRecords {
id partiallyMockedSessionManager = [OCMockObject partialMockForObject:self.network.sessionManager];
[[partiallyMockedSessionManager expect] POST:OCMOCK_ANY parameters:OCMOCK_ANY success:OCMOCK_ANY failure:OCMOCK_ANY];
[[[partiallyMockedSessionManager expect] andDo:^(NSInvocation *invocation) {
void (^successBlock)(NSURLSessionDataTask *task, id responseObject);
[invocation getArgument:&successBlock atIndex:4];
successBlock(nil, @[@"first", @"second"]);
}] POST:OCMOCK_ANY parameters:OCMOCK_ANY success:OCMOCK_ANY failure:OCMOCK_ANY];
self.network.sessionManager = partiallyMockedAuthorizationSessionManager;
[self.network fetchRecords];
}
如果做错了,请告诉我如何返回自己对成功阻止的回答。以及如何验证setRecordsWithLists:
从成功块调用的内容。
好吧,实际上您将期望值设置了两次,这意味着您也期望该方法也被调用两次。如果这不是您想要的,则应删除第一个期望值。
另一方面,由于需要检查是否调用了方法,因此您可能想为self.network
对象创建部分模拟。使用部分模拟(或间谍),您可以使用自己喜欢的任何参数设置方法的期望值,并验证它以完成测试。
您的代码最终应如下所示:
- (void)tesNetworkSuccessExecuteSetRecords {
id partiallyMockedSessionManager = [OCMockObject partialMockForObject:self.network.sessionManager];
[[[partiallyMockedSessionManager expect] andDo:^(NSInvocation *invocation) {
void (^successBlock)(NSURLSessionDataTask *task, id responseObject);
[invocation getArgument:&successBlock atIndex:4];
successBlock(nil, @[@"first", @"second"]);
}] POST:OCMOCK_ANY parameters:OCMOCK_ANY success:OCMOCK_ANY failure:OCMOCK_ANY];
id spyNetwork = OCMPartialMock(self.network);
[[spy expect] setRecordsWithLists:OCMOCK_ANY];
self.network.sessionManager = partiallyMockedAuthorizationSessionManager;
[self.network fetchRecords];
[spyNetwork verify];
}
同样,您可以在期望中添加偏好参数。注意方法的名称,它应该以“ test”开头,否则XCode可能不会运行或将其识别为测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句