数据库驱动的 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应用程序中根据用户时区/位置设置日期/时间?

如何扩展 CodeIgniter 数据库实用程序类

持久连接不适用于 codeIgniter 中的 mysql 驱动程序

通过 ODBC 将 codeigniter 3 连接到任何地方的 SQL