提问人:deceze 提问时间:6/28/2010 最后编辑:deceze 更新时间:2/10/2015 访问量:22351
如何对你的 API 进行单元测试?
How to unit test your API?
问:
我现在需要为使用 CakePHP 1.3 编写的 REST API 编写单元测试。API 支持 GET、POST 和 PUT 请求来查询和操作数据。
是否有任何既定的方法可以使用固定装置测试模拟 HTTP 请求的 API 的正确输入/输出?我不想对实时(dev)数据库运行实际的POST/PUT请求。如何才能最好地模拟系统以使用临时模型,同时按原样测试堆栈的其余部分?
使用控制器测试测试 GET 请求非常简单。但是,对于数据操作,API 非常广泛地使用 HTTP 标头,并且还解析原始 XML 和 JSON POST/PUT 数据。控制器单元测试方法仅通过在控制器中设置来模拟 POST 数据,这不允许我正确测试 API。$this->data
答:
我建议从一些研究开始。这些文章应该会有所帮助:
看起来您可能能够测试原始 XML PUT 和 POST 数据而不会遇到太多麻烦。CakePHP REST文档是这样说的:
如果 POST 或 PUT 请求具有 XML 内容类型,则输入将被获取并传递给 Cake 的 Xml 对象的实例,该实例分配给控制器的 $data 属性。由于此功能,并行处理 XML 和 POST 数据是无缝的:无需更改控制器或模型代码。您需要的一切都应该以 $this->data 结束。
尝试在调试模式下单步执行控制器代码,以查看 XML 请求期间实际输入的内容。$this->data
至于避免使用实时数据库,SQLite内存数据库会更容易吗?
评论
$this->data
您应该创建 Mock 或使用 Isolation Framework 来模拟 API 环境。单元测试不应依赖于 Internet 连接、网络、端点等资源。
如果您打算测试真实的 API 调用,您应该创建集成测试项目并将其用于此目的。但请注意,集成测试大多是不可重复的,每次运行都会给你不同的结果。
评论