如何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大多不可重复,每次运行都会给您不同的结果。