Tôi đồng ý với phần lớn ở trên, liên quan đến kiểm tra đơn vị. Tuy nhiên, tôi nghĩ rằng điều quan trọng là nâng cao điểm mà sử dụng kho lưu trữ Mock và kiểm tra đơn vị không cung cấp cho bạn cùng một mức độ kiểm tra như một thử nghiệm tích hợp DB sẽ.
Ví dụ: cơ sở dữ liệu của chúng tôi thường có các lần xóa tầng được tạo ngay trong lược đồ. Trong trường hợp này, việc xóa một thực thể chính trong tổng hợp sẽ tự động xóa tất cả các thực thể con. Tuy nhiên, điều này sẽ không tự động áp dụng trong kho lưu trữ giả mạo mà không được sao lưu bởi cơ sở dữ liệu vật lý với các quy tắc kinh doanh này (trừ khi bạn xây dựng tất cả các quy tắc đó vào Mock). Điều này là quan trọng bởi vì nếu ai đó đến và thay đổi thiết kế của lược đồ của tôi, tôi cần nó để phá vỡ các bài kiểm tra của tôi để tôi có thể điều chỉnh mã/lược đồ cho phù hợp. Tôi đánh giá cao đây là Kiểm thử Tích hợp chứ không phải Kiểm thử Đơn vị nhưng nghĩ rằng nó đáng được nhắc đến.
Tùy chọn ưa thích của tôi là tạo Cơ sở dữ liệu thiết kế chính chứa dữ liệu mẫu (cùng loại dữ liệu bạn tạo trong Mocks). Trong khi bắt đầu mỗi lần chạy thử nghiệm, tôi có một kịch bản lệnh tự động tạo bản sao lưu của MasterDB và khôi phục nó thành "TestDB" (tất cả các thử nghiệm của tôi đều sử dụng). Bằng cách đó, tôi duy trì một kho dữ liệu thử nghiệm sạch trong Master hơn là tái tạo chính nó sau mỗi lần chạy thử nghiệm. Các thử nghiệm của tôi có thể phát xung quanh với dữ liệu và kiểm tra tất cả các tình huống cần thiết.
Khi tôi gỡ lỗi ứng dụng, tôi có một tập lệnh khác sao lưu và khôi phục DB chính thành cơ sở dữ liệu DEV. Tôi có thể chơi xung quanh với dữ liệu ở đây mà không lo lắng về việc mất dữ liệu mẫu của tôi. Tôi thường không chạy tập lệnh cụ thể này mỗi phiên vì sự chậm trễ chờ DB được tạo lại. Tôi có thể chạy nó một lần một ngày và sau đó chơi xung quanh/gỡ lỗi các ứng dụng trong suốt cả ngày. Ví dụ, nếu tôi xóa tất cả các bản ghi từ một bảng như là một phần của quá trình gỡ lỗi, tôi sẽ chạy tập lệnh để tạo lại DevDB khi tôi hoàn thành.
Các bước này nghe có vẻ như họ sẽ thêm một lượng thời gian rất lớn vào quy trình, nhưng thực tế - chúng không. Ứng dụng của chúng tôi hiện có trong phạm vi 3500 thử nghiệm, với khoảng 3000 người trong số họ truy cập vào DB tại một số điểm. Sao lưu và phục hồi cơ sở dữ liệu thường mất khoảng 10-12 giây khi bắt đầu mỗi lần chạy thử. Và vì toàn bộ bộ thử nghiệm chỉ được thực hiện khi kiểm tra TFS, chúng tôi không bận tâm nếu chúng ta phải đợi lâu hơn nữa. Vào một ngày trung bình, toàn bộ bộ thử nghiệm của chúng tôi mất khoảng 15-20 phút để chạy.
Tôi đánh giá cao và chấp nhận thử nghiệm tích hợp chậm hơn nhiều so với kiểm tra đơn vị (vì nhu cầu vốn có để sử dụng DB thực) nhưng nó đại diện cho ứng dụng 'thế giới thực' chặt chẽ hơn. Ví dụ: Kho lưu trữ Mock không trả lại mã lỗi DB, không hết thời gian chờ, chúng không bị khóa, chúng không hết dung lượng đĩa, v.v.
Kiểm tra đơn vị là ok cho đơn giản tính toán, quy tắc kinh doanh cơ bản, vv và chắc chắn chúng hoàn toàn là lựa chọn tốt nhất cho hầu hết các hoạt động không liên quan đến truy cập DB (hoặc tài nguyên khác). Nhưng tôi không nghĩ rằng chúng có giá trị như các bài kiểm tra tích hợp - mọi người nói rất nhiều về các bài kiểm tra đơn vị, nhưng ít được nói về các bài kiểm tra tích hợp.
Tôi mong rằng những người đam mê thử nghiệm đơn vị sẽ gửi lửa theo cách của tôi cho việc này. Đó là tốt - Tôi chỉ cố gắng để mang lại một số cân bằng và để nhắc nhở mọi người rằng các dự án có đầy đủ các bài kiểm tra đơn vị thông qua vẫn có thể thất bại nặng nề khi bạn thực hiện chúng trong lĩnh vực này.
Tôi sử dụng cùng một đoạn mã dữ liệu mocking và nó hoạt động độc đáo –