我正处于需要为使用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 回答
我建议从一点研究开始 . 这些文章应该有所帮助
Unit Testing CakePHP Shells
Testing CakePHP controllers - Mock Objects edition
Testing Models with CakePHP 1.2 test suite
您应该创建Mocks或使用Isolation Framework来模拟API环境 . 单元测试不应该依赖于互联网连接,网络, endpoints 等资源 .
如果您打算测试真正的API调用,则应创建集成测试项目并将其用于此目的 . 但请注意,集成测试通常不可重复,并且会在每次运行时为您提供不同的结果 .
看起来您可以毫不费力地测试原始XML PUT和POST数据 . The CakePHP REST documentation这样说:
尝试在调试模式下单步执行控制器代码,以查看在XML请求期间通过
$this->data
实际进入的内容 .至于避免实时数据库,SQLite内存数据库会更容易吗?