¿Alguien tiene un enlace a un tutorial bueno y funcional o un libro sobre cómo comenzar a agregar la capa DBUnit a mis pruebas PHPUNit?PHPUnit y DBUnit - para comenzar
He intentado seguir el código de
protected function getDatabaseTester()
{
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$connection = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo);
$tester = new PHPUnit_Extensions_Database_DefaultTester($connection);
$tester->setSetUpOperation(PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT());
$tester->setTearDownOperation(PHPUnit_Extensions_Database_Operation_Factory::NONE());
/*
* the next line fails with the error
PHP Fatal error: __autoload(): Failed opening required 'PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet.php' (include_path= ***
*/
$tester->setDataSet(new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__).'/../../../files/xml_database_export.xml'));
return $tester;
}
Se crea el XML a través de mysqldump comando. Me encantaría usar CSV, o incluso una matriz en la memoria (lo que funcione)
Desafortunadamente, parece que no puedo iniciar este sistema.
Después de una buena cantidad de tiempo aprendiendo DbUnit, me gustaría que alguien me hubiera dicho que básicamente '' TRUNCATE'' (borra) una tabla y la rellena con datos personalizados que proporciona desde un XML. Aparentemente, eso es todo. Sin conexión persistente mágica, sin un mundo de crecimiento y sueños similar al de Avatar, y retozando a través de conjuntos de datos temporales. Al final del día, puedo hacer casi lo mismo con 'CREATE TEMPORARY TABLE', que es aún mejor porque mantiene las relaciones. Así que me gustaría decir algo como 'no pierdas el tiempo con esta maldita extensión', pero debido a mi limitada experiencia, no lo haré. – Ben
Mientras estoy aquí, informaré un par de cosas que me llevó un tiempo averiguar: debe llamar a 'parent :: setUp()' si tiene un método 'setUp()'; de lo contrario, la base de datos no se completará Y en ese método, DbUnit elevará "amablemente" su nivel 'PDO :: ATTR_ERRMODE' a 'excepción' cuando es' setUp() ', así que incluso si tuviera' ERRMODE_SILENT' obtendrá excepciones donde no está esperando ellos. Además, no puedo encontrar una API, por lo que debes examinar el código fuente o leer el libro, que es como documentación, pero más largo, con gemas importantes escondidas en páginas de texto./ rant – Ben
Lamento inducir a error, antes dije 'CREATE TEMPORARY TABLE' mantiene relaciones - en realidad, no mantendrá claves externas. Sin embargo, no se preocupe, simplemente despliegue una variante 'CREATE TABLE' para lograr lo mismo. – Ben