Eu construí um plugin para o Symfony 1.4 (PHP) para resolver esse problema (entre outros). Ele é modelado de acordo com a maneira como a estrutura de teste do Django (Python) opera : a estrutura cria e preenche um banco de dados de teste separado antes de cada teste iniciar e destrói o banco de dados de teste após a conclusão de cada teste.
Eu tinha algumas preocupações com essa estratégia, tanto em termos de desempenho (se o esquema não muda, por que não simplesmente limpar os dados em vez de reconstruir toda a estrutura?) E conveniência (às vezes eu quero inspecionar o banco de dados depois de um falha no teste, por isso não a destrua indiscriminadamente!), por isso adotei uma abordagem ligeiramente diferente.
Antes da execução do primeiro teste, o banco de dados é destruído e reconstruído, caso haja alterações no modelo desde o último teste. Antes de cada teste subsequente, os dados no banco de dados são limpos, mas a estrutura não é reconstruída (embora uma reconstrução manual possa ser acionada a partir de um teste, se necessário).
Ao carregar seletivamente acessórios de dados em cada teste, é possível criar o ambiente adequado para esse teste sem interferir nos testes subsequentes. Os arquivos de fixação também podem ser reutilizados, o que torna essa tarefa muito menos onerosa (embora ainda seja minha parte menos favorita dos testes de escrita!).
Nas duas estruturas de teste, o adaptador de banco de dados está configurado para usar a conexão de teste em vez da conexão "produção" para impedir que a execução do teste corrompa os dados existentes.