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


PHPUnit - database testing, how to manage that

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

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

  2. 创建setUp()方法,设置包含ORM数组的属性,然后进行操作

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

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

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

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

如果您没有嵌套事务支持,您可以在每次测试中设置和删除整个数据库,但速度会较慢。请注意,您并不总是需要针对真实的数据库进行测试。。。这取决于你在测试什么样的东西。

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

MySQL网站上有一些测试数据库。我觉得Sakila相当难,所以我使用了世界数据库。