Tôi có lẽ có thể cung cấp cho bạn một trải nghiệm của chúng tôi khi chúng tôi bắt đầu xem xét đơn vị thử nghiệm quy trình trung cấp của chúng tôi bao gồm một tấn các hoạt động sql "logic kinh doanh".
Trước tiên, chúng tôi đã tạo một lớp trừu tượng cho phép chúng tôi "đặt vào" bất kỳ kết nối cơ sở dữ liệu hợp lý nào (trong trường hợp của chúng tôi, chúng tôi chỉ đơn giản hỗ trợ một kết nối kiểu ODBC).
Khi đã có, chúng tôi có thể thực hiện một số thứ như thế này trong mã của chúng tôi (chúng tôi làm việc trong C ++, nhưng tôi chắc chắn bạn hiểu ý tưởng đó):
GetDatabase (). ExecuteSQL ("INSERT INTO foo (blah, blah)")
Trong thời gian chạy bình thường, GetDatabase () sẽ trả về một đối tượng đã cung cấp tất cả sql của chúng tôi (bao gồm các truy vấn), thông qua ODBC trực tiếp đến cơ sở dữ liệu.
Sau đó chúng tôi bắt đầu xem xét các cơ sở dữ liệu trong bộ nhớ - tốt nhất theo một cách lâu dài dường như là SQLite. ( http://www.sqlite.org/index.html ). Thật đơn giản để thiết lập và sử dụng, và cho phép chúng tôi phân lớp và ghi đè GetDatabase () để chuyển tiếp sql sang cơ sở dữ liệu trong bộ nhớ được tạo và hủy cho mọi thử nghiệm được thực hiện.
Chúng tôi vẫn đang ở giai đoạn đầu của việc này, nhưng cho đến nay nó vẫn tốt, tuy nhiên chúng tôi phải đảm bảo rằng chúng tôi tạo bất kỳ bảng nào được yêu cầu và điền vào chúng bằng dữ liệu thử nghiệm - tuy nhiên chúng tôi đã giảm khối lượng công việc ở đây bằng cách tạo một tập hợp các hàm trợ giúp chung có thể thực hiện rất nhiều điều này cho chúng ta.
Nhìn chung, nó đã giúp ích rất nhiều cho quá trình TDD của chúng tôi, vì việc tạo ra những thay đổi khá vô hại để sửa một số lỗi nhất định có thể có những ảnh hưởng khá lạ đối với các khu vực khác (khó phát hiện) trong hệ thống của bạn - do tính chất của sql / cơ sở dữ liệu.
Rõ ràng, các trải nghiệm của chúng tôi tập trung vào môi trường phát triển C ++, tuy nhiên tôi chắc chắn rằng bạn có thể có được thứ gì đó tương tự hoạt động theo PHP / Python.
Hi vọng điêu nay co ich.