Gần đây tôi đã có nhiều lần cần thiết để duy trì các thủ tục và chức năng được lưu trữ phức tạp. Chúng đã bị hỏng, thường là theo những cách khá tinh tế - có rất ít trường hợp bạn sẽ gọi SP với các tham số hợp lệ và nó hoàn toàn không hoạt động.
Giải pháp của tôi là phát triển một khung hình thực thi các thủ tục được lưu trữ trong một giao dịch, sau khi khởi tạo cơ sở dữ liệu theo các điều kiện ban đầu tôi cần, sau đó kiểm tra kết quả mong đợi, cũng trong cùng một giao dịch. Giao dịch đã được khôi phục vào cuối thử nghiệm.
Điều này đã làm việc rất tốt. Nhưng một số người sẽ gọi đây là "thử nghiệm tích hợp" vì nó liên quan đến việc tích hợp với cơ sở dữ liệu. Tôi gọi nó là thử nghiệm đơn vị, vì tôi đã thử nghiệm các thành phần riêng lẻ và các trường hợp thử nghiệm riêng lẻ cho các thành phần đó và vì tôi hoàn toàn kiểm soát trạng thái ban đầu của cơ sở dữ liệu.
Nhưng dòng nên được vẽ ở đâu? Đây là thử nghiệm tích hợp hoặc thử nghiệm đơn vị? Có một lý do thực tế tại sao loại thử nghiệm này là một ý tưởng tồi? Nếu đây là thử nghiệm tích hợp "duy nhất", có ai có đề xuất về cách thực hiện "thử nghiệm đơn vị" thực tế trên các quy trình được lưu trữ này không?
Cập nhật, 3 năm rưỡi sau. Trong dự án hiện tại của tôi, tôi đã bắt đầu sử dụng các bài kiểm tra đơn vị SSDT, với thành công, mặc dù chúng có thể tốt hơn. Xem Xác minh mã cơ sở dữ liệu bằng cách sử dụng các bài kiểm tra đơn vị SQL Server . Chúng thường triển khai dự án cơ sở dữ liệu tới phiên bản SQL Server LocalDB của bạn, do đó, việc này sẽ xóa mọi câu hỏi về môi trường cơ sở dữ liệu ảnh hưởng đến kiểm tra. Tôi điền vào cơ sở dữ liệu các dữ liệu cần thiết trong Thử nghiệm trước, để loại bỏ các câu hỏi về nội dung cơ sở dữ liệu. Trên thực tế, tôi sử dụng các câu lệnh MERGE để làm điều này, đảm bảo rằng mọi dữ liệu tôi không cần cho bài kiểm tra hiện tại sẽ bị xóa, chèn hoặc cập nhật từ cơ sở dữ liệu trước khi kiểm tra. Họ có vấn đề:
- Họ không nhanh
- Không thể sử dụng lại các điều kiện kiểm tra
- Không thể sử dụng lại các thử nghiệm trước (trừ khi bạn làm cho chúng chung cho tất cả các thử nghiệm trong một dự án)
- Giao diện người dùng có thể được cải thiện
Một trong những lý do cho các vấn đề trên là tôi chưa phàn nàn về chúng. Tôi khuyên mọi người quan tâm nên thử tính năng này và sau đó phàn nàn về nó. Đó là cách cải tiến được thực hiện.