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

use*_*069 0 php database phpunit unit-testing

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

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

  2. 创建setUp()方法,设置包含ORM数组的属性,并对其进行处理.

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

Mat*_*hew 8

您可能想阅读PHPUnit关于数据库测试的章节.

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

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

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