Mocktail 1.2.1

Mocktail 1.2.1

测试已测试
Lang语言 Obj-CObjective C
许可证 自定义
发布上次发布2015年4月

Brian Partridge维护。



Mocktail 1.2.1

  • 作者
  • Jim Puls

这是一个在 Objective-C 应用程序中模拟 HTTP 服务器的简单方法。

特点

  • 代码仅有一百行
  • 尽可能简单
  • 慢!
    • 处理 N 个模拟响应的性能是 O(N)
    • 加载整个(可能非常大)的文件到内存中!
  • 测试不佳
  • 可能在处理不正确的输入时崩溃
  • 有点像是一个修正

您不应该将 Mocktail 与您的代码一起打包。它是一个开发工具。

使用方法

是的,真的,它很酷,您仍然可以使用它!您可以在大约8分钟内阅读整个源代码,了解其工作原理。重要的 API 是一个方法

+ (instancetype)startWithContentsOfDirectoryAtURL:(NSURL *)url configuration:(NSURLSessionConfiguration *)configuration;

您只需将一些文件按特定格式(稍后会详细介绍)放入一个目录,并为该目录添加 .tail 文件扩展名,然后将该目录的 URL 传递给 Mocktail。就是这样。

该目录可以位于您的应用程序包内部(如果正在支持测试套件,例如),或者如果是在模拟器中运行,您可以将目录的 URL 设置为桌面上的文件夹。

文件格式

我希望存在这样一个标准,但遗憾的是,并非如此。(参见 HAR,它认为它将承担这项任务,但它用于分析请求期间发生了什么,而不是返回的内容。)

所以我们自己创建了一个。它是换行符分隔的。

第1行 是一个正则表达式,匹配 HTTP 方法。例如 GETGET|POST.* 都可以工作。

第2行 是一个正则表达式,匹配 HTTP 请求的完整 URL。例如 http://yourserver.com:1234/very/specific/path\?param1=value1 或 maybe just /partial/path/to/something/.* 也很好。可能有一个以上的正则表达式匹配完整的 URL(例如,对于特定的路径使用 http://yourserver.com:1234/path,并通过 /.* 匹配所有其他内容)。如果发生这种情况,最长的正则表达式将匹配。

第3行 是响应的 HTTP 状态码。通常是 200

从第4行开始直到空白行是一组原始HTTP响应头。例如,要设置名为auth_token的cookie,使用Set-Cookie: auth_token=42,要指定内容的HTTP/MIME类型,使用Content-Type: application/json; charset=utf-8Content-Type: text/html。如果你要发送二进制数据,最佳做法是在Content-Type头后面加上;base64,然后对响应体进行Base64编码。每个头都应该单独一行,该部分以空白行结束。

响应头部分之后的所有内容(即第4行之后的空白行)将被作为响应体返回,无论是直接返回还是Base64解码,这取决于你放在响应头中的内容类型。除非你使用了占位符支持,但这将稍后讨论。只要文件以.tail结尾,文件名是什么无关紧要。你只需在每个模拟响应“端点”中使用这些文件之一,Mocktail启动时会加载它们。

占位符支持

哦,你是想使你的模拟响应更智能?这可不是懒汉的风格。

那么这么做。

1. 跟踪你从调用startWithContentsOfDirectoryAtURL:获得的对象。

2. 在你的模拟响应中添加一个模板标记。

{{ foo }}

3. 使用那个优雅的Objective-C键值设置语法来设置一些键和值。

Mocktail *mocktail = [Mocktail startWithContentsOfDirectoryAtURL:url];
mocktail[@"foo"] = @"bar";

4. 没有步骤7。

疯狂属性

NSURLProtocol自从诞生以来一直存在,除非你阅读过像@mattt关于该主题的出色NSHipster博客文章,否则它的用途并不明显。如果你没有阅读NSHipster,你是在错过一些东西。它太棒了。

贡献

欢迎你的pull请求,但请不要对此太认真。记住,Mocktail最伟大的功能之一就是它的简单性。我们的律师希望你也首先签署此表