Ho creato un plugin per Symfony 1.4 (PHP) per affrontare questo problema (tra gli altri). È modellato secondo il modo Il framework di prova di Django (Python) opera : il framework costruisce e popola un database di test separato prima dell'inizio di ciascun test e distrugge il database di test dopo il completamento di ciascun test.
Ho avuto un paio di dubbi su questa strategia, sia in termini di prestazioni (se lo schema non cambia, perché non cancellare semplicemente i dati anziché ricostruire l'intera struttura?) e praticità (a volte voglio ispezionare il database dopo un errore di test, quindi non distruggerlo indiscriminatamente!), quindi ho adottato un approccio leggermente diverso.
Prima dell'esecuzione del primo test, il database viene distrutto e ricostruito, nel caso in cui siano stati apportati cambiamenti al modello dall'ultimo test. Prima di ogni esecuzione successiva del test, i dati nel database vengono cancellati, ma la struttura non viene ricostruita (sebbene una ricostruzione manuale possa essere attivata da un test, se necessario).
Caricando in modo selettivo i dispositivi dati in ciascun test, è possibile creare l'ambiente appropriato per quel test senza interferire con i test successivi. I file delle fixture possono anche essere riutilizzati, il che rende questa attività molto meno onerosa (sebbene sia ancora la mia parte meno preferita dei test di scrittura!).
In entrambi i framework di test, la scheda di rete è configurata per utilizzare la connessione di prova anziché la connessione "di produzione" per impedire che l'esecuzione del test danneggi i dati esistenti.