Làm cách nào để thực hiện Kiểm tra đơn vị để đảm bảo quy trình được lưu trữ đang xóa hàng khỏi cơ sở dữ liệu?


8

Tôi mới tham gia thử nghiệm đơn vị và tôi cần một số trợ giúp sau đây.

Tôi đã tạo một dự án nhỏ để giúp tôi tìm hiểu cách thực hiện Bài kiểm tra đơn vị. Chức năng cho một trong các biểu mẫu trong ứng dụng của tôi sẽ xóa người dùng khỏi bảng Người dùng (và các hàng khác trong bảng ánh xạ).

Hiện tại, kiểm tra đơn vị mà tôi đã tạo để kiểm tra điều này thiết lập các đối tượng cần thiết và sau đó gọi phương thức quy tắc nghiệp vụ (truyền vào id người dùng) để gọi phương thức truy cập dữ liệu để thực hiện thủ tục được lưu trữ sẽ xóa các hàng trong bảng.

Đây có phải là phương pháp chính xác để kiểm tra xem một cái gì đó đang bị xóa thành công? Phương pháp kiểm tra / thiết lập đơn vị trước tiên có nên chèn một số dữ liệu kiểm tra mà đơn vị kiểm tra sau đó xóa không?

Câu trả lời:


8

IMHO nếu bạn mới bắt đầu học thử nghiệm đơn vị, tốt hơn hết là để cơ sở dữ liệu ra khỏi hình ảnh ngay bây giờ. Dữ liệu trong DB khó kiểm tra hơn - thực tế khi bạn đang kiểm tra mã thực hiện các cuộc gọi trực tiếp đến DB, thì đó không phải là kiểm tra đơn vị nữa mà là kiểm tra tích hợp .

Bạn có thể đơn vị mã kiểm tra thao tác một DB, nhưng nó đòi hỏi nhiều nỗ lực và công cụ, bao gồm các khuôn khổ thêm - như DBUnit trong thế giới Java -, giao diện, mocks vv mà là chủ đề nâng cao hơn.


Cảm ơn, câu hỏi của tôi có lẽ rất mới. Tôi đoán một trong những điều tôi cảm thấy khó khăn là quyết định ngay cả những gì cần kiểm tra! Do đó, tại sao tôi nghĩ rằng việc kiểm tra dữ liệu trong cơ sở dữ liệu không khác nhiều so với việc viết các bài kiểm tra xác nhận các giá trị được trả về bằng các phương thức, v.v.
Theomax

3
Và viết các bài kiểm tra đơn vị cho dự án nhỏ mà tôi tạo ra đã khiến tôi nhận ra rằng rất nhiều mã cần phải được chuyển vào lớp quy tắc kinh doanh thay vì ở dạng mã phía sau! Đây phải là một ví dụ về một trong những lợi ích của việc kiểm tra không đúng cách?
Theomax

@aspdotnetuser: Đúng vậy! Mã thử nghiệm là mã duy trì.
kevin cline

1
when you are directly testing a DB, it isn't a unit test anymore but integration test.Bạn có chắc không? Nếu bạn thử nghiệm đang làm thế nào một công trình ứng dụng với một db, đó là hội nhập chắc chắn, nhưng đơn vị thử nghiệm một db có thể: blogs.msdn.com/b/atverma/archive/2010/07/28/...
StuperUser

1
@StuperUser, cụm từ của tôi không rõ ràng, cảm ơn vì đã phản hồi :-) Ý tôi là thử nghiệm, ví dụ mã C # phụ thuộc trực tiếp vào (và thực hiện cuộc gọi đến) DB. Kiểm thử đơn vị, ví dụ các thủ tục được lưu trữ bên trong DB thực sự là một chủ đề khác. Tôi cập nhật câu trả lời của tôi ở trên để làm rõ.
Péter Török

6

Sẽ dễ dàng hơn nhiều để viết các bài kiểm tra đơn vị cho các thủ tục lưu sẵn SQL trong SQL. Hãy nhìn vào tQueryt . Tránh kiểm tra lại các thủ tục được lưu trữ trong các bài kiểm tra đơn vị C # của bạn; lấy lời khuyên của ratchet freak và giả lập cơ sở dữ liệu để kiểm tra mã C #.


2

bạn nên mô phỏng cơ sở dữ liệu (trừu tượng hóa) trong khi kiểm tra biểu mẫu

về cơ bản cung cấp một triển khai giả mà tối thiểu cần thiết để hoàn thành các bài kiểm tra

bằng cách này khi bạn gọi gửi trên biểu mẫu, sau đó bạn có thể xem nếu người dùng xóa trong truy cập dữ liệu được gọi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.