我想在我的项目中进行一些单元测试(我是测试新手),但在线教程似乎只展示了测试最简单的东西的示例。
我想测试的是,在我的 SurveyController 中将 POST 发送到 addAction 后会导致向我的调查表和问题表添加相应的行(一对多)。
测试数据库相关内容的最佳实践是什么?我是否为我的测试环境创建单独的数据库并在其上运行测试?那是唯一和正确的选择吗?
我想在我的项目中进行一些单元测试(我是测试新手),但在线教程似乎只展示了测试最简单的东西的示例。
我想测试的是,在我的 SurveyController 中将 POST 发送到 addAction 后会导致向我的调查表和问题表添加相应的行(一对多)。
测试数据库相关内容的最佳实践是什么?我是否为我的测试环境创建单独的数据库并在其上运行测试?那是唯一和正确的选择吗?
这取决于你的情况。
这是我对此的看法:
这个想法是测试但也要干燥(不要重复自己)。您的测试必须涵盖所有或尽可能多的不同情况,以确保您的组件经过彻底测试并准备好发布。
如果您使用已经开发的框架来访问您的数据库,例如Doctrine、Zend Framework、PhalconPHP等,那么您可以假设该框架已经过测试,而不是测试实际的 CRUD 操作。您可以专注于自己的代码所做的事情。
有些人可能甚至想测试,但在我看来,这是一种过度杀伤和资源浪费。如果他们只想进行更多测试,实际上可以将特定框架的测试包含在他们自己的测试中:)
但是,如果您负责数据库层类及其与应用程序的交互,那么测试是必须的。您可能不会一直运行它们,您需要通过一些代码来证明数据库操作是否有效,但您需要拥有它们。
最后,您可以按照Mark Baker在代码中建议的方式使用模拟测试,并假设数据库将按照您的预期响应(因为它已经过测试)。然后,您可以看到您的应用程序将如何对不同的响应或结果做出反应。
模拟数据库操作实际上会使您的测试运行得更快(以及此策略带来的其他好处),因为测试本身不会有任何数据库交互。这在具有数百个甚至数千个测试和持续集成的项目中变得非常方便。
高温高压