【问题标题】:PHPUnit - database testing, how to manage thatPHPUnit - 数据库测试,如何管理它
【发布时间】:2012-08-28 11:36:45
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否尝试过在setUp / tearDown 中使用数据库事务开始/回滚?我只需设置一个与生产模式相同的测试数据库(也可以是一个 sqlite 数据库文件)。

标签: php database unit-testing phpunit


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 2012-03-20
      • 1970-01-01
      • 2018-04-27
      • 2011-10-17
      • 2015-03-15
      • 1970-01-01
      • 2019-11-02
      • 2013-07-11
      相关资源
      最近更新 更多