Вы можете создать служебную функцию, которая перестраивает базу данных, которую можно вызывать перед тестами, которые требуют чистой базы данных, или с помощью функции setUp ():
class DbUtil {
public static function rebuild($src, $dest) {
exec("mysql -u someuser -p password -e 'DROP DATABASE $dest'");
exec("mysql -u someuser -p password -e 'CREATE DATABASE $dest'");
exec("mysqldump -d -u someuser -p password $src > mysql -u someuser -p password $dest");
}
}
class MyTest extends PHPUnit_Framework_TestCase {
protected function setUp() {
DbUtil::rebuild('prod_database1', 'test_database1');
DbUtil::rebuild('prod_database2', 'test_database2');
}
// ...
}
Возможно, это не самый эффективный подход, но вы получите чистую базу данных для каждого теста.
Если вы хотите или можете переключиться с MySQL для своих тестов, я успешно создал шаблон базы данных sqlite и скопировал этот файл в другое место для тестирования. Каждый тест просто перезаписывает файл тестовой базы данных чистым файлом шаблона.
Примечание: команда Exec написана только для демонстрационных целей и не была проверена на точные параметры / параметры.