使用AFNetworking和OCMock的测试网络

划船人

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

- (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,用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:从成功块调用的内容。

JC Chaparro

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

另一方面,由于需要检查是否调用了方法,因此您可能想为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用AFNetworking和OCMock的测试网络

来自分类Dev

OCMock:使用NSDictionary参数调用测试方法

来自分类Dev

没有使用XCTest编译OCMock测试

来自分类Dev

OCMock测试类别方法

来自分类Dev

网络测试框架和重复

来自分类Dev

使用虚拟网络和人工延迟测试网络应用程序

来自分类Dev

OCMock和UIViewController

来自分类Dev

OCMock和块

来自分类Dev

OCMock和AVCaptureDeviceInput

来自分类Dev

OCMock是否在测试中的代码中自动使用了模拟实例?

来自分类Dev

我可以使用OCMock测试是否调用了超类吗?

来自分类Dev

使用OCMock时,如何从测试方法中检查传递的回调?

来自分类Dev

我可以使用OCMock测试是否调用了超类吗?

来自分类Dev

AFNetworking检查可用网络

来自分类Dev

使用nn.CrossEntropyLoss()训练的网络的测试和置信度得分

来自分类Dev

如何使用ansible测试网络连接?

来自分类Dev

如何测试AFNetworking

来自分类Dev

如何测试AFNetworking

来自分类Dev

使用JSON和AFNetworking NSDictionary使用数据填充表格视图

来自分类Dev

使用JSON和AFNetworking NSDictionary使用数据填充表格视图

来自分类Dev

卷积神经网络中的训练和测试

来自分类Dev

AFNetworking有时无法使用某些WiFi网络连接

来自分类Dev

OCMock和Nocilla是否不兼容?

来自分类Dev

在AFNetworking中使用URL参数和JSON正文进行POST

来自分类Dev

使用CSS和网络使用Sprite SVG

来自分类Dev

使用 find 和 -size 测试

来自分类Dev

AFNetworking,UITableView和块

来自分类Dev

AFNetworking 2.0和AFPropertylist

来自分类Dev

Swift和AFNetworking集成