Я хочу заполнить таблицы базы данных данными, выполнить некоторые операции с использованием библиотеки, которую я создаю, и, наконец, проверить эти таблицы на соответствие другому набору данных ожидаемых значений. Я использую файлы 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? Если так, как я должен делать это? Любая помощь приветствуется!
Я закончил тем, что использовал наборы данных массива согласно рекомендации @ xmike.
$expected = new \PHPUnit_Extensions_Database_DataSet_ArrayDataSet([
'table' => [
['column' => 'value'] // row
]
])
static::assertTablesEqual(/* ... */) // run tests against array dataset
Это имеет пару приятных преимуществ. Во-первых, мне не нужно использовать внешние файлы данных, и я могу хранить данные рядом с тестами. А во-вторых, это намного проще и проще для понимания.
Других решений пока нет …