2010-08-25 10 views
10

¿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.

Respuesta

9

Hay un capítulo a las pruebas de base de datos en el manual de PHPUnit:

Y última guía de B. Eberlei a Prueba de DB con PHPUnit

También hay un Blogpost por el autor de PHPUnit Sebastián Bergmann sobre el tema (2008 aunque):

Algunas entradas de blog aún más antiguas de Mike animado, el autor de la DbUnit extensión se puede encontrar en

Un tutorial más reciente (2010) estaría en el blog de Mateo Turland:

También puede visitar #phpunit on Freenode IRC para obtener apoyo oficial.

+2

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

+1

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

+0

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