Тестирование базы данных PHPUnit: как использовать набор данных на тест?

Я хочу заполнить таблицы базы данных данными, выполнить некоторые операции с использованием библиотеки, которую я создаю, и, наконец, проверить эти таблицы на соответствие другому набору данных ожидаемых значений. Я использую файлы 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? Если так, как я должен делать это? Любая помощь приветствуется!

0

Решение

Я закончил тем, что использовал наборы данных массива согласно рекомендации @ xmike.

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

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

Это имеет пару приятных преимуществ. Во-первых, мне не нужно использовать внешние файлы данных, и я могу хранить данные рядом с тестами. А во-вторых, это намного проще и проще для понимания.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]