Saya membangun sebuah plugin untuk Symfony 1.4 (PHP) untuk mengatasi masalah ini (antara lain). Ini dimodelkan setelah cara kerangka uji Django beroperasi (Python) : kerangka kerja membangun dan mengisi basis data pengujian terpisah sebelum setiap pengujian dimulai, dan itu menghancurkan basis data pengujian setelah setiap pengujian selesai.
Saya punya beberapa kekhawatiran tentang strategi ini, baik dari segi kinerja (jika skema tidak berubah, mengapa tidak menghapus data daripada membangun kembali seluruh struktur?) Dan kenyamanan (kadang-kadang saya ingin memeriksa database setelah gagal ujian, jadi jangan hancurkan tanpa pandang bulu!), jadi saya mengambil pendekatan yang sedikit berbeda.
Sebelum pengujian pertama berjalan, basis data dihancurkan dan dibangun kembali, jika ada perubahan model sejak pengujian terakhir. Sebelum setiap pengujian berikutnya berjalan, data dalam database dihapus, tetapi struktur tidak dibangun kembali (meskipun pembangunan kembali manual dapat dipicu dari pengujian jika perlu).
Dengan memuat perlengkapan data secara selektif di setiap tes, seseorang dapat menciptakan lingkungan yang tepat untuk tes itu tanpa mengganggu tes berikutnya. File fixture juga dapat digunakan kembali, yang membuat tugas ini jauh lebih sulit (meskipun itu masih bagian favorit saya dari tes menulis!).
Dalam kedua kerangka kerja pengujian, adaptor basis data dikonfigurasikan untuk menggunakan koneksi uji alih-alih koneksi "produksi" untuk mencegah pelaksanaan pengujian merusak data yang ada.