首页 文章

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

提问于
浏览
47

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

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


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

3 回答

  • 4
  • 5

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

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

  • 3

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

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

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

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

相关问题