Tôi đã xây dựng một plugin cho Symfony 1.4 (PHP) để giải quyết vấn đề này (trong số những thứ khác). Nó được mô hình hóa sau cách hoạt động của khung kiểm tra của Django (Python) : khung xây dựng và điền vào cơ sở dữ liệu kiểm tra riêng trước khi bắt đầu kiểm tra và phá hủy cơ sở dữ liệu kiểm tra sau khi hoàn thành mỗi kiểm tra.
Tôi có một vài lo ngại về chiến lược này, cả về hiệu suất (nếu lược đồ không thay đổi, tại sao không đơn giản xóa dữ liệu thay vì xây dựng lại toàn bộ cấu trúc?) Và sự thuận tiện (đôi khi tôi muốn kiểm tra cơ sở dữ liệu sau khi kiểm tra thất bại, vì vậy đừng phá hủy nó một cách bừa bãi!), vì vậy tôi đã thực hiện một cách tiếp cận hơi khác.
Trước khi thử nghiệm đầu tiên chạy, cơ sở dữ liệu bị hủy và được xây dựng lại, trong trường hợp đã có thay đổi mô hình kể từ lần thử nghiệm cuối cùng. Trước mỗi lần chạy thử tiếp theo, dữ liệu trong cơ sở dữ liệu sẽ bị xóa, nhưng cấu trúc không được xây dựng lại (mặc dù việc xây dựng lại thủ công có thể được kích hoạt từ một thử nghiệm nếu cần thiết).
Bằng cách tải có chọn lọc dữ liệu trong mỗi thử nghiệm, người ta có thể tạo môi trường thích hợp cho thử nghiệm đó mà không can thiệp vào các thử nghiệm tiếp theo. Các tập tin lịch thi đấu cũng có thể được sử dụng lại, điều này làm cho nhiệm vụ này ít gặp hơn (mặc dù đây vẫn là phần yêu thích nhất của tôi trong các bài kiểm tra viết!).
Trong cả hai khung kiểm tra, bộ điều hợp cơ sở dữ liệu được cấu hình để sử dụng kết nối thử nghiệm thay vì kết nối "sản xuất" để ngăn việc thực hiện kiểm tra làm hỏng dữ liệu hiện có.