使用NSURLSession进行单元测试

hpi*_*que 5 macos unit-testing nsurlcache ios nsurlsession

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

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

Mar*_*bri 5

我过去常常OHHTTPStubs模仿回应.

您只需在测试之前注册存根(例如,自述文件):

[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"}];
}];
Run Code Online (Sandbox Code Playgroud)

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