Статьи

Тестирование базы данных с помощью PHPUnit и MySQL

Недавно я внес вклад в проект PHPUnit, который, как мне показалось, я хотел бы обсудить в блоге. Одно из расширений в комплекте с PHPUnit добавляет поддержку для тестирования базы данных . Это расширение было предоставлено Майком Лайвли и является портом расширения DbUnit для среды модульного тестирования Java JUnit . Если вы заинтересованы в получении дополнительной информации о модульном тестировании базы данных, проверить эту презентацию на Sebastian Bergmann по этому вопросу.

Одним из основных компонентов обоих расширений является набор данных. Модульные тесты базы данных включают загрузку начального набора данных в базу данных, выполнение кода, который выполняет операцию с этим набором данных, такую ​​как удаление записи, и затем проверку состояния набора данных, чтобы подтвердить, что операция имела желаемый эффект. DbUnit поддерживает несколько форматов для начальных наборов данных. Расширение базы данных PHPUnit включает поддержку форматов DbUnit XML и flat XML, а также формата CSV .

Если вы используете MySQL в качестве базы данных, CSV был единственным форматом, поддерживаемым как утилитой mysqldump, так и расширением базы данных PHPUnit до этого момента. Мой вклад добавляет поддержку его формата XML в расширение. Хотя эта поддержка была разработана для работы в ветке PHPUnit 3.4.x, она не будет доступна в стабильном выпуске до 3.5.0. А пока вы можете использовать его сейчас.

  1. Перейдите к коммиту на Github и примените дополнения и модификации, включенные в него, к вашей установке PHPUnit.
  2. Из оболочки получите свой начальный набор данных XML и сохраните его в месте, доступном для ваших модульных тестов.

     
    mysqldump --xml -t -u username -p database > seed.xml
  3. Создайте класс тестового случая, который расширяет PHPUnit_Extensions_Database_TestCase. Реализуйте getConnection () и getDataSet () в соответствии с документацией, где последняя будет включать вызов метода для создания набора данных из файла XML, как показано ниже.

     
    $dataSet = $this->createMySQLXMLDataSet('/path/to/seed.xml');
  4. На этом этапе вы можете выполнить операции с базой данных, чтобы получить ее ожидаемое состояние после теста, создать дамп XML базы данных в этом состоянии, а затем сравнить этот дамп с фактическим содержимым базы данных в тестовом методе, чтобы подтвердить, что два равны.
    $expected = $this->createMySQLXMLDataSet('/path/to/expected.xml');
    $actual = new PHPUnit_Extension_Database_DataSet_QueryDataSet($this->getConnection());
    // Specify a SELECT query as the 2nd parameter here to limit the data set, else the entire table is used
    $actual->addTable('tablename');
    $this->assertDataSetsEqual($expected, $actual);

    Это оно! Надеюсь, это окажется полезным для кого-то еще .

    Источник: http://matthewturland.com/2010/01/04/database-testing-with-phpunit-and-mysql/