Tôi nghĩ câu trả lời hay nhất trong các tình huống như thế này là suy nghĩ rất kỹ về những gì bạn đang cố thử nghiệm. Lý tưởng nhất là một thử nghiệm đơn vị nên cố gắng kiểm tra một thực tế duy nhất về một phương pháp hoặc chức năng duy nhất. Khi bạn bắt đầu kết hợp nhiều thứ với nhau, nó sẽ đi qua thế giới của các bài kiểm tra tích hợp (có giá trị như nhau, nhưng khác nhau).
Đối với mục đích thử nghiệm đơn vị, để cho phép bạn chỉ kiểm tra điều bạn muốn kiểm tra, bạn sẽ cần phải thiết kế cho khả năng thử nghiệm. Điều này thường liên quan đến việc sử dụng thêm các giao diện (tôi giả sử .NET từ mã bạn đã cho thấy) và một số dạng tiêm phụ thuộc (nhưng không yêu cầu thùng chứa IoC/DI trừ khi bạn muốn một). Nó cũng được hưởng lợi từ, và khuyến khích bạn tạo các lớp học rất gắn kết (mục đích duy nhất) và tách riêng (phụ thuộc mềm) trong hệ thống của bạn.Vì vậy, khi bạn đang thử nghiệm logic nghiệp vụ phụ thuộc vào dữ liệu từ một cơ sở dữ liệu, bạn thường sẽ sử dụng một cái gì đó giống như Repository Pattern và tiêm một fake/stub/mock IXXXRepository để thử nghiệm đơn vị. Khi bạn đang thử nghiệm kho lưu trữ cụ thể, bạn cần phải thực hiện loại dọn dẹp cơ sở dữ liệu mà bạn đang hỏi hoặc bạn cần shim/stub cuộc gọi cơ sở dữ liệu bên dưới. Điều đó thực sự tùy thuộc vào bạn.
Khi bạn cần tạo/điền/dọn dẹp cơ sở dữ liệu, bạn có thể xem xét tận dụng các phương pháp thiết lập và ngăn nắp sẵn có trong hầu hết các khuôn khổ thử nghiệm. Nhưng hãy cẩn thận, bởi vì một số trong số chúng được chạy trước và sau mỗi bài kiểm tra, điều này có thể ảnh hưởng nghiêm trọng đến hiệu suất của các bài kiểm tra đơn vị của bạn. Các thử nghiệm chạy quá chậm sẽ không chạy rất thường xuyên, và điều đó là xấu.
Trong MS-Test, các thuộc tính bạn sẽ sử dụng để khai báo thiết lập/teardown là ClassInitialize, ClassCleanUp, TestInitialize, TestCleanUp. Các khung công tác khác có cấu trúc được đặt tên tương tự.
Có một số khuôn khổ có thể giúp bạn với mocking/stubbing: Moq, Rhino Mocks, NMock, TypeMock, Moles and Stubs (VS2010), VS11 Fakes (VS11 Beta), vv Nếu bạn đang tìm kiếm cho các khuôn khổ dependency injection, nhìn vào những thứ như Ninject, Unity, Castle Windsor, v.v.
Nguồn
2012-03-25 17:20:01
Bạn cũng nên sử dụng 'TearDown' (hoặc tương đương trong bộ của bạn) để dọn sạch vì nếu kiểm tra của bạn không thành công, mã làm sạch sẽ không được thực hiện. –
Làm thế nào để bắt một ngoại lệ, sau đó lại ném nó sau khi dọn dẹp? –
Jimmy Bogard (tác giả của * AutoMapper *) có một bài viết và công cụ tuyệt vời: [Kiểm tra cơ sở dữ liệu đáng tin cậy với Respawn] (https://lostechies.com/jimmybogard/2015/02/19/reliable-database-tests-with-respawn /) –