【问题标题】:Unit tests with NSURLSession使用 NSURLSession 进行单元测试
【发布时间】:2023-03-11 16:10:01
【问题描述】:
我想为使用共享NSURLSession,尤其是NSURLSessionDataTask 下载数据的方法编写单元测试。基本上,我希望目标方法无需互联网连接即可接收模拟响应/数据。
模拟这些组件的不那么显眼的方式是什么?我正在考虑用模拟响应和数据填充NSURLCache,但我觉得这对NSURLSession 和NSURLSessionDataTask 的工作方式有太多假设。还有其他建议吗?
【问题讨论】:
标签:
ios
macos
unit-testing
nsurlsession
nsurlcache
【解决方案1】:
我最近使用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"}];
}];
在内部,它使用NSURLProtocol 拦截请求并将它们存根。