数据库驱动的 CodeIgniter Web 应用程序中的单元测试
Posted
技术标签:
【中文标题】数据库驱动的 CodeIgniter Web 应用程序中的单元测试【英文标题】:Unit tests in a database driven CodeIgniter web-application 【发布时间】:2012-03-02 04:52:17 【问题描述】:CodeIgniter 带有一个内置的单元测试类,我非常想使用它。但是,几乎所有我想测试的函数都通过添加记录、删除记录等与数据库交互。例如,我将如何为“创建用户”函数编写测试,而不在每次运行测试时实际创建用户?
经过进一步研究,我似乎需要将 Mock 对象用于数据库等外部服务。除了这个论坛主题之外,我还没有找到关于如何做到这一点的文档方式: http://codeigniter.com/forums/viewthread/106737
有没有实际的文档?
【问题讨论】:
这一切都将取决于您用于单元测试的框架。你选了一个吗? 除非我对文档有误解,否则 CodeIgniter 内置了自己的单元测试框架。这不正确吗? CodeIgniter 2 确实内置了一个测试框架。据我所见,它并不完美,但足以开始使用。模拟对象将是理想的方式,但这是 CI 中缺少的东西,因此没有官方文档。您链接到的文章看起来是一个很好的起点。 试试这个库:github.com/kenjis/ci-phpunit-test 来帮助你。 【参考方案1】:如果您的数据库驱动程序允许事务,请使用它们。做任何需要测试的事情,然后回滚(成功或失败)。
我发现很难使用控制器操作来运行单元测试。如果您找到了这样做的好方法,请告诉我们!
【讨论】:
实际上这似乎是一个非常好的解决方案。单元测试控制器并不容易,但如果你将大部分代码放在模型中,你可以对它们进行单元测试没有问题以上是关于数据库驱动的 CodeIgniter Web 应用程序中的单元测试的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter:太多的 ajax 调用导致 Web 应用程序超时
当我在 Android Web 浏览器中关闭运行 CodeIgniter Web 应用程序的 Android 应用程序时,CodeIgniter 会话不会关闭
PHP,Codeigniter:如何在Web应用程序中根据用户时区/位置设置日期/时间?