VOKMockUrlProtocol 2.4.0

VOKMockUrlProtocol 2.4.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2017年5月

Sean WolterIsaac GreenspanBrock BolandEllen ShapiroIsaac GreenspanCarl Hill-Popper维护。



 
依赖于
ILGHttpConstants~> 2.0
VOKBenkode~> 0.3
 

  • 作者:
  • Vokal

一个解析并返回模拟数据的 URL 协议。

使用

创建一个名为 VOKMockData 的文件夹参考,将整个 VOKMockData 目录复制到您的测试应用程序包中,并将模拟数据文件放在那里。确定一个模拟数据项的正确文件名的一个简单方法是执行模拟 API 调用,并在日志中注意报道的缺失模拟数据文件。完整的命名规范在这里描述。

注意: 模拟数据文件的命名规范在 2.x 版本中已更改。 1.x 版本的模拟数据文件可能需要重命名才能与 2.x 版本配合使用,特别是对于具有主体的请求(例如,POST 请求),特别是当主体不是 application/x-www-form-urlencoded 时。

模拟数据文件可以有

  • 扩展名为 .json,它将以 Content-type: text/json 返回 HTTP/1.1 200 成功,并包含 .json 文件的内容;或者
  • 具有 .http 扩展名,以解析以下格式的 HTTP 响应
    • 第一行上的状态
    • 以下的行上的标题
    • 空白行
    • 以下行上的主体

示例 HTTP 响应

带有标题和响应体的 HTTP 响应。

HTTP/1.1 201 CREATED
Server: nginx/1.4.6 (Ubuntu)
Date: Thu, 02 Oct 2014 20:50:29 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
Allow: POST, OPTIONS

{"id": 63, "auth_token": "50db3356e743fa3f1b790a8648fc15cc4bbf04a2", "phone_number": "+13125551214", "email": "[email protected]", "name": "Testy McTesterson", "role": "Customer"}

带有标题但没有主体的 HTTP 响应。注意末尾的空白行!

HTTP/1.1 202 Accepted
Content-Type: text/plain; charset=UTF-8
Date: Fri, 17 Oct 2014 14:12:46 GMT
Server: Apache-Coyote/1.1
Content-Length: 0
Connection: keep-alive

没有标题和主体的 HTTP 响应。注意末尾的空白行!

HTTP/1.1 202 Accepted

没有标题但有一个主体的 HTTP 响应。

HTTP/1.1 202 Accepted

{"favorite_dog_breed": "dogfish"}

与 NSURLSessionConfiguration 一起使用

为了使 NSURLSession 能使用 VOKMockUrlProtocol,您必须将其类别插入到 NSURLSessionConfiguration's protocolClasses 之中。

示例

    Class mockURLProtocol = [VOKMockUrlProtocol class];
    NSMutableArray *currentProtocolClasses = [self.sessionConfiguration.protocolClasses mutableCopy] ?: [NSMutableArray array];
    [currentProtocolClasses insertObject:mockURLProtocol atIndex:0];
    self.sessionConfiguration.protocolClasses = currentProtocolClasses;

为了在模拟和实时之间切换,您还可以通过仅移除它来取出 Mock URL 协议

    Class mockURLProtocol = [VOKMockUrlProtocol class];
    NSMutableArray *currentProtocolClasses = [self.sessionConfiguration.protocolClasses mutableCopy];
    [currentProtocolClasses removeObject:mockURLProtocol];
    self.sessionConfiguration.protocolClasses = currentProtocolClasses;

与框架/Swift 一起使用

当将 VOKMockUrlProtocol 建立为框架(通常与 Swift 一起使用)时,请确保调用 setTestBundle: 类方法并将您的测试包传递给它。因为默认行为是回退到当前类的包,所以它会检查框架的包而不是测试包,这样将无法正常运行。