I’d been bugged for a while because when I was writing phpunit tests for some of my code, I couldn’t find a tidy way of pre-loading data into a MySQL database for testing against. Everything I came up with seemed really kludgy and the documentation hadn’t really enlightened me much.
Eventually I resorted to reading the code for phpunit and discovered that it can load a database from an XML dump, which can be created directly from mysqldump. This means that if I have a database containing a large amount of static data that I need to test against I can first do:
mysqldump --xml ... > test-data.xml
and as long as the database is created my phpunit test classes just start as follows:
<?php
require_once 'PHPUnit/Extensions/Database/TestCase.php';
class ExampleTest extends PHPUnit_Extensions_Database_TestCase
{
protected function
getConnection()
{
try {
$pdo = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME, DBUSER,
DBPASS );
} catch ( PDOException $e ) {
throw ( new Exception ( $e->getMessage()));
}
return $this->createDefaultDBConnection( $pdo, DBNAME );
}
protected function getDataSet()
{
return $this->createMySQLXMLDataSet(
dirname(__FILE__).'/test-data.xml' );
}
// test case functions follow
which is far neater than the previous mess I was using to initialise the database.