【问题标题】:Changing datasets for each PHPUnit Test更改每个 PHPUnit 测试的数据集
【发布时间】:2015-12-02 14:02:53
【问题描述】:

我在 PHPUnit 测试中有点菜鸟,我需要涵盖一个方法的多个场景。该方法获取表的行并根据它做出决策,因此如果我有 0 行匹配我的查询,它将执行一些操作,否则,它将执行另一个操作。

我完成了 DBUnit 的设置,一切都在运行,但是整个类都在运行相同的 getDataSet 方法,因此它运行的是相同的 MySQLXMLDump。

例如:

testScenarioA -> 空表。

testScenarioB -> 表有数据。

我需要在我的类上每个测试函数加载一个foo XML。我怎样才能做到这一点?

【问题讨论】:

  • 什么是类?它有哪些方法?您使用什么数据集?
  • 不管是什么类,也不管它有什么方法。问题是:如何根据测试函数而不是类动态加载数据集?
  • 如果没有任何信息,我们无法为您提供帮助。请添加一些,否则您将无法得到答案。
  • 需要哪些信息才能知道我只需要为每种方法加载数据集?我只是不明白......问题不在我的代码上,我还没有实现这个,我正在搜索关于我如何做到这一点的信息,我在文档上并不幸运,所以我去了这里
  • 我们不是提供教程的人,我们帮助人们修复损坏的部分。如果没有任何工作要做,我们就无法做到这一点。如果您需要教程,请访问 Google,另请参阅 on topic 文档

标签: php phpunit database-testing


【解决方案1】:

因此,如果您的单元测试类中有一个数据集,您可以让该数据集返回空结果和一些数据

public static function dataForTest() {

    return [
        'empty' => [getEmptyDataset()]
        'results' => [getResults()]
    ];
}

然后在用于测试的函数中将其与您的数据集一起使用

/**
 * @dataProvider dataForTest
 */
public function testSyncUser($dataTypes) {
    foreach ($dataTypes as $dataType) {
        // Run tests
    } 
}

或者,您可以创建一个辅助类来与单元测试一起使用,以便即时获取测试数据。 PHPUnit 在实例化测试单元类之前生成所有数据集,因此有时这可能是一种有用的方法。

【讨论】:

猜你喜欢
  • 2018-04-27
  • 2012-06-02
  • 1970-01-01
  • 2011-05-08
  • 2012-11-27
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多