2010-08-25 7 views
10

Qualcuno ha un link a un buon tutorial o libro di lavoro su come iniziare ad aggiungere il livello DBUnit ai miei test PHPUNit?PHPUnit e DBUnit - per iniziare

Ho provato seguendo il codice in

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; 
} 

Viene creato il XML tramite mysqldump comando. Userò felicemente CSV, o anche un array in memoria (qualunque cosa funzioni)

Purtroppo non riesco proprio a far partire questo sistema.

risposta

9

C'è un capitolo al test del database nel manuale PHPUnit:

E di B. Eberlei Ultimate Guide a DB Test con PHPUnit

C'è anche un Blogpost per autore di PHPUnit Sebastian Bergmann sul tema (2008 però):

alcuni post del blog ancora più antiche di Mike Lively, l'autore del DBUnit estensione può essere trovato alla

Una più recente tutorial (2010) sarebbe in Blog di Matteo Turland:

È possibile anche visitare #phpunit on Freenode IRC per ottenere supporto ufficiale.

+2

Dopo una buona quantità di tempo nell'apprendimento di DbUnit, vorrei che qualcuno mi avesse detto che fondamentalmente bastava "TRUNCATE's (cancella) una tabella e la popola con dati personalizzati forniti da un XML. Apparentemente, è tutto. Nessuna connessione magica persistente, nessun mondo di crescita e sogni simile ad Avatar e gioco di dati temporanei. Alla fine del giorno posso praticamente fare la stessa cosa con 'CREATE TEMPORARY TABLE', che è ancora meglio perché mantiene le relazioni. Quindi mi piacerebbe dire qualcosa del tipo 'non sprecare il tuo tempo con questa estensione schifosa' ma a causa della mia esperienza limitata, non lo farò. – Ben

+1

Mentre sono qui riferirò un paio di cose che mi ci sono volute un po 'per capire: devi chiamare 'parent :: setUp()' se hai un metodo 'setUp()', altrimenti il il database non popolerà. E con questo metodo, DbUnit aumenterà "volentieri" il tuo livello di 'PDO :: ATTR_ERRMODE 'a" eccezione "quando è' setUp() ', quindi anche se tu avessi' ERRMODE_SILENT' otterrai delle eccezioni dove non ti aspetti loro. Inoltre, non riesco a trovare un'API, quindi devi esaminare il codice sorgente o leggere il libro, che è come la documentazione, ma più lungo, con gemme importanti nascoste nelle pagine di testo./ rant – Ben

+0

Spiacente di indurre in errore, sopra ho detto 'CREATE TEMPORARY TABLE' mantiene le relazioni - in realtà, non manterrà le chiavi esterne. Non preoccuparti però, tira semplicemente una variante 'CREATE TABLE' per ottenere la stessa cosa. – Ben