使用NSURLSession进行单元测试

时间:2014-03-09 18:20:22

标签: ios macos unit-testing nsurlsession nsurlcache

我想为使用共享NSURLSession的方法编写单元测试,特别是NSURLSessionDataTask来下载数据。基本上,我希望目标方法在不需要互联网连接的情况下接收模拟响应/数据。

模仿这些组件的不那么不引人注目的方式是什么?我正在考虑使用模拟响应和数据填充NSURLCache但我觉得这假设NSURLSessionNSURLSessionDataTask的工作方式太多了。还有其他建议吗?

1 个答案:

答案 0 :(得分:5)

我最近使用OHHTTPStubs来模拟回复。

您只需在测试之前注册存根(例如来自README):

[OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
    return [request.URL.host isEqualToString:@"mywebservice.com"];
} withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) {
    // Stub it with our "wsresponse.json" stub file
    return [OHHTTPStubsResponse responseWithFileAtPath:OHPathForFileInBundle(@"wsresponse.json",nil)
        statusCode:200 headers:@{@"Content-Type":@"text/json"}];
}];

在内部,它使用NSURLProtocol拦截请求并将其存根。