PHPUnit - 数据库测试,如何管理它

好吧,正如标题所示,我可以想到三种方法来管理测试数据库输出(我在我的应用程序中使用 ORM,在单元测试中使用 PDO)。哪个最好?你如何处理这个?:

  1. 使用我专门用于测试的数据创建数据集,并更改代码以使其读取 xml 而不是 ORM 数组(在测试类中)。

  2. 创建 setUp() 方法,设置包含 ORM 数组的属性,然后处理它。

  3. 与第二点相同,但使用另一个数据库,专门为测试而创建

最佳答案

您可能想阅读 PHPUnit's chapter on database testing .

我通过我自己的瘦包装器使用 PDO,它支持通过保存点进行嵌套事务。在 Bootstrap 中,我创建了一个测试数据库,其中包含整个生产结构以及非常基本的种子数据。在每个 setUp() 和 tearDown() 期间,我开始一个事务然后回滚。

每个测试都从原始 SQL 文件中导入所需的数据子集。从那里开始,ORM 使用真正的插入等进行测试。但这只有效,因为我的数据库驱动程序支持嵌套事务。如果测试开始/提交并检查成功/失败,一切仍然有效。

如果您没有嵌套事务支持,您可以在每次测试时设置和拆除整个数据库,但那样会更慢。请注意,您不必总是针对真实数据库进行测试……这取决于您要测试的内容。

https://stackoverflow.com/questions/12252823/

相关文章:

visual-studio-2010 - 当我尝试在 VS 2010 中运行 Nuint 测试时,此

oracle - 执行 Oracle 过程时向用户显示注释

python - 我如何将参数传递给鼠兔回调

Vb.net - 仅在单击项目时显示上下文菜单条

spring - 如何从自定义 java 组件中的上下文属性占位符标记获取属性

php - 如何使用 php 获取 URL 主机

javascript - 预期的十六进制数字

vb.net - 获取文本框以仅接受 vb.net 中的字符

php - yii cactivedataprovider默认指定排序,但前台使用AJAX排序无效

php - 如何将所有文件名放入php数组