PHPUnit 数据库测试:每次测试如何使用数据集?
PHPUnit Database Testing: How To Use Dataset Per Test?
我想用数据播种数据库 table(s),使用我正在构建的库执行一些操作,最后针对预期的另一个数据集测试这些 table(s)值。我正在使用 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);
将 table 名称与数据进行比较。每个测试需要一个数据集文件。拥有大量数据集文件似乎过多,这让我觉得我做错了什么。
有办法吗?我使用 phpunit/dbunit 错了吗?如果是这样,我应该怎么做?感谢您的帮助!
根据@xmike 的建议,我最终使用了数组数据集。
$expected = new \PHPUnit_Extensions_Database_DataSet_ArrayDataSet([
'table' => [
['column' => 'value'] // row
]
])
static::assertTablesEqual(/* ... */) // run tests against array dataset
这有几个很好的优点。首先,我不必使用外部数据文件,可以将数据保存在测试旁边。其次,这更简单、更容易理解。
我想用数据播种数据库 table(s),使用我正在构建的库执行一些操作,最后针对预期的另一个数据集测试这些 table(s)值。我正在使用 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);
将 table 名称与数据进行比较。每个测试需要一个数据集文件。拥有大量数据集文件似乎过多,这让我觉得我做错了什么。
有办法吗?我使用 phpunit/dbunit 错了吗?如果是这样,我应该怎么做?感谢您的帮助!
根据@xmike 的建议,我最终使用了数组数据集。
$expected = new \PHPUnit_Extensions_Database_DataSet_ArrayDataSet([
'table' => [
['column' => 'value'] // row
]
])
static::assertTablesEqual(/* ... */) // run tests against array dataset
这有几个很好的优点。首先,我不必使用外部数据文件,可以将数据保存在测试旁边。其次,这更简单、更容易理解。