Test unitari degli oggetti Doctrine con PHPUnit
Domanda
Sto iniziando a provare e testare i miei oggetti Doctrine con PHPUnit e vorrei ricaricare nuovamente il DB dai miei oggetti modello ogni volta.
Il mio primo tentativo è simile al seguente:
class Tests_User extends PHPUnit_Framework_TestCase
{
public function setUp()
{
Doctrine_Manager::connection('mysql://user:pass@localhost/testdb');
Doctrine::createDatabases();
Doctrine::createTablesFromModels('../../application/models');
}
public function testSavingWorks()
{
$user = new User();
$user->save();
}
public function testSavingWorksAgain()
{
$user = new User();
$user->save();
}
public function tearDown()
{
Doctrine::dropDatabases();
}
}
Il problema è che quando setUp () viene chiamato di nuovo per il secondo test, createTablesFromModels () fallisce, quindi ricevo un errore perché nessuna delle tabelle è presente.
Gradirei davvero un esempio di come qualcun altro ha reinizializzato una connessione Doctrine per PHPUnit o altri scopi di test dell'unità.
Soluzione
Quindi si scopre che createTablesFromModels include i file e quindi confronta gli elenchi delle classi definite prima e dopo, motivo per cui non funziona due volte.
Una sequenza come la seguente funziona quando ripetuta:
Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());
Altri suggerimenti
Dai un'occhiata a questo Gist da Ocramius, che mostra che puoi testare utilizzando dispositivi di dati: https: // gist .github.com / Ocramius / 3994325