PHPUnit数据库测试:如何使用每次测试的数据集?

时间:2017-11-14 16:44:08

标签: php unit-testing phpunit dbunit

我想用数据为数据库表种子,使用我正在构建的库执行一些操作,最后根据期望值的另一个数据集测试这些表。我正在使用yaml文件。

到目前为止,我可以使用此代码:

/* ... */

public function getDataSet() {
  return new \PHPUnit_Extensions_Database_DataSet_YamlDataSet('path/to/yaml/data');
}

/* ... */

public function testFoo() {
  // setup state and run operations

  // load expected data to test against
  $expected = new \PHPUnit_Extensions_Database_DataSet_YamlDataSet('path/to/expected/yaml');
  static::assertTablesEqual($expected->getTable('foo'), $this-getConnection()->createDataSet('foo'));
}

我想能够做到

// fooSeedData.yml
foo:
  - id: 1
  # ...


// fooExpectedData.yml
foo_test1:
# ...

foo_test2:
# ...

// fooTest.php
public function foo_test1() {
  /* ... */
  $expected->getTable('foo_test1')
  /* ... */
}

public function foo_test2() {
  /* ... */
  $expected->getTable('foo_test2')
  /* ... */
}

static::assertTablesEqual($expected, $actual);将表名与数据进行比较。每次测试都需要一个数据集文件。有大量的数据集文件似乎过多,这让我觉得我做错了。

有办法做到这一点吗?我使用phpunit / dbunit错了吗?如果是这样,我应该怎么做?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我最终根据@ xmike的建议使用了数组数据集。

$expected = new \PHPUnit_Extensions_Database_DataSet_ArrayDataSet([
  'table' => [
    ['column' => 'value'] // row
  ]
])

static::assertTablesEqual(/* ... */) // run tests against array dataset

这有几个很好的优点。首先,我不必使用外部数据文件,并且可以将数据保存在测试旁边。其次,这更简单,更容易理解。