首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AFNetworking和OCMock的测试网络

使用AFNetworking和OCMock的测试网络
EN

Stack Overflow用户
提问于 2015-06-05 12:22:29
回答 1查看 261关注 0票数 1

我有一个包含下一个方法的类网络:

代码语言:javascript
复制
- (void)fetchRecords {
Network * __weak weakSelf = self;
[self.sessionManager POST:@"" parameters:@{@"parameter":"param1"}
                               success:^(NSURLSessionDataTask *task, id responseObject) {
    [weakSelf setRecordsWithLists:responseObject];
}
                               failure:nil];

属性sessionManagerAFHTTPSessionManager类。我想测试我的网络通讯。我想检查一下,如果成功块被执行,那么调用setRecordsWithLists:方法。

我使用OCMock,搜索并编写下一个测试代码:

代码语言:javascript
复制
- (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:从成功块调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 18:03:55

实际上,您设置了两次期望,这意味着您也期望调用该方法两次。如果这不是你想要的,你应该删除第一个期望。

另一方面,由于需要检查是否调用了方法,所以可能希望为self.network对象创建部分模拟。使用部分模拟(或间谍),您可以使用您喜欢的任何参数为您的方法设置期望,并验证它以完成测试。

您的代码最终应该如下所示:

代码语言:javascript
复制
- (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运行或识别为测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30666486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档