我想为使用共享NSURLSession
的方法编写单元测试,特别是NSURLSessionDataTask
来下载数据。基本上,我希望目标方法在不需要互联网连接的情况下接收模拟响应/数据。
模仿这些组件的不那么不引人注目的方式是什么?我正在考虑使用模拟响应和数据填充NSURLCache
但我觉得这假设NSURLSession
和NSURLSessionDataTask
的工作方式太多了。还有其他建议吗?
答案 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
拦截请求并将其存根。