我希望使用 SimpleTest 在 CakePHP (1.3) 中测试基本的 CRUD 操作。
例如,我希望添加一条新记录,并确保在验证失败时收到错误消息,如果保存顺利则收到新记录。
将这些测试编写为 (1) 相关操作的控制器测试(例如 add()),还是编写为 (2) Web 测试,使用 $this->post() 或 $this->setField() 是否更好?
1 回答
这是一个老问题,但仍然没有答案,所以我会试一试......
我相信您需要做的第一件事是更好地分离您的关注点。现在你正在做的,至少对我来说,是一种代码味道......意味着一些事情是不对的!
我是怎么得出这个结论的?
好吧,你问的问题以及你是如何回答的。您要问的问题是:
“我应该如何测试模型的功能?”
您的答案:
“从控制器或视图测试它”
所以,我要做的第一件事是在适当的模型中设置一个方法来做你想做的事。写出你认为需要的代码。保存记录并根据您提出的任何条件语句返回您正在寻找的适当值。
之后,我会设置一些固定装置,以便您有一些数据可以测试。您可以在 CakePHP 手册http://book.cakephp.org/view/1201/Preparing-test-data 了解更多关于 CakePHP 固定装置以及如何创建它们的信息(在未来的项目中,我会先制作固定装置,但仅此而已只是个人喜好)
设置好固定装置后,您实际上可以继续测试您的新模型方法。在我看来,测试模型是在 CakePHP 中最容易测试的。我不会在这里详细介绍,只是因为 CakePHP 手册http://book.cakephp.org/view/1207/Testing-models有很多关于如何测试模型的信息。
此时,您应该有一个经过适当单元测试的模型操作,并且关注点被正确分离。
话虽这么说,如果您感觉超级勇敢并希望从各个角度测试您的代码,那么请务必设置一个控制器测试以确保操作正确执行。设置 Web 测试以确保整个包协同工作。
不过,首先,将您的担忧分开。