如何unit testing你的API?
我现在需要为使用CakePHP 1.3编写的REST API编写unit testing。 API支持查询和操作数据的GET,POST和PUT请求。
有没有build立的方法来testing模拟HTTP请求的API的正确input/输出,使用灯具 ? 我不想运行实际(开发)数据库实际POST / PUT请求。 我怎样才能最好地嘲笑系统使用临时模型,但现在testing堆栈的其余部分?
通过控制器testing来testingGET请求是很容易的。 但是,对于数据操作,API使用的HTTP头相当广泛,并且还parsing原始的XML和JSON POST / PUT数据。 控制器unit testing方法只是通过在控制器中设置$this->data
来模拟POST数据,这不允许我正确地testingAPI。
我build议从一点研究开始。 这些文章应该帮助:
- unit testingCakePHP壳
- testingCakePHP控制器 – 模拟对象版本
- 用CakePHP 1.2testing套件testing模型
看起来您可能可以testing原始XML PUT和POST数据,而不会有太多的麻烦。 CakePHP REST文档说:
如果一个POST或者PUT请求有一个XML内容types,那么这个input被传递给Cake的Xml对象的一个实例,该对象被分配给控制器的$ data属性。 由于这个特性,并行处理XML和POST数据是无缝的:不需要对控制器或模型代码进行更改。 你需要的一切应该以$ this-> data结尾。
尝试在debugging模式下逐步浏览控制器代码,以查看在XML请求期间通过$this->data
实际进入的内容。
至于避免活的数据库,SQLite内存数据库会更容易吗?
您应该创buildMocks或使用隔离框架来模拟API环境。 unit testing不应该依赖像互联网连接,networking,端点等资源。
如果您打算testing真正的API调用,则应该创build集成testing项目并将其用于此目的。 但请注意,集成testing大多不可重复,每次运行都会给您不同的结果。