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

时间:2012-09-03 18:56:55

标签: php database unit-testing phpunit

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

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

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

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

2 个答案:

答案 0 :(得分:8)

您可能需要阅读PHPUnit's chapter on database testing

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

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

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

答案 1 :(得分:2)

在我的测试中,我使用的是测试数据库。

MySQL在他们的网站上有一些测试数据库。我发现Sakila相当困难,所以我使用World数据库。