如何对您的API进行单元测试?

时间:2010-06-28 02:55:05

标签: unit-testing api cakephp

我正处于需要为使用CakePHP 1.3编写的REST API编写单元测试的地步。 API支持用于查询和操作数据的GET,POST和PUT请求。

使用灯具,是否有任何既定的方法来测试模拟HTTP请求的API的正确输入/输出?我不想对live(dev)数据库运行实际的POST / PUT请求。我怎样才能最好地模拟系统以使用临时模型,然后按原样测试堆栈的其余部分?


使用controller tests测试GET请求非常简单。但是,对于数据操作,API非常广泛地使用HTTP头,并且还解析原始XML和JSON POST / PUT数据。控制器单元测试方法仅通过在控制器中设置$this->data来模拟POST数据,这不允许我正确地测试API。

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

您应该创建Mocks或使用Isolation Framework来模拟API环境。单元测试不应该依赖于互联网连接,网络,端点等资源。

如果您打算测试真正的API调用,则应创建集成测试项目并将其用于此目的。但请注意,集成测试通常不可重复,并且每次运行都会给您不同的结果。

答案 2 :(得分:3)

看起来您可以毫不费力地测试原始XML PUT和POST数据。 The CakePHP REST documentation说:

  

如果POST或PUT请求具有XML内容类型,则输入并传递给Cake的Xml对象实例,该实例被分配给控制器的$ data属性。由于此功能,并行处理XML和POST数据是无缝的:控制器或模型代码无需更改。您需要的所有内容都应以$ this->数据结束。

尝试在调试模式下逐步调试控制器代码,以查看在XML请求期间通过$this->data实际传入的内容。

至于避免实时数据库,SQLite内存数据库会更容易吗?