2010-02-11 58 views
9

Tôi sắp hoàn thành việc tạo một dịch vụ web sẽ được tiêu thụ bởi hệ thống tùy chỉnh nội bộ không .NET. Tôi muốn một số lời khuyên về cách tốt nhất để thiết lập các lớp thử nghiệm và các phương thức trên một .asmx (thực hành tốt nhất, cách kiểm tra các cuộc gọi, những gì không làm, vv) cụ thể trong môi trường .NET 3.5.Tư vấn kiểm tra đơn vị - cách kiểm tra đơn vị của bạn .asmx

Tôi sẽ sử dụng NUnit để thực hiện kiểm tra này. Nó đơn giản như việc tạo một dự án thử nghiệm, thêm dịch vụ vào nó và sau đó tạo một lớp thử nghiệm và thể hiện của dịch vụ đó ... sau đó bắt đầu tạo các phương thức thử nghiệm của bạn?

Tôi cần kiểm tra cả hai phương thức .asmx và .asmx.cs (đơn vị kiểm tra các phương thức) để tôi biết nếu tôi chuyển nó cho đồng đội mà nó sẽ hoạt động.

Có lẽ không thể kiểm tra trực tiếp .asmx.cs và tôi sẽ chỉ phải kiểm tra thông qua các bài kiểm tra tích hợp. Tôi đoán những gì tôi thực sự cần là giả lập .asmx của tôi. Có lẽ là không thể.

Trả lời

8

Thực hành tốt nhất của kiểm tra Đơn vị không phải là để kiểm tra tệp asmx, nhưng các phần (đơn vị) đằng sau tệp asmx. Nếu bạn có thể chia nhỏ mã của bạn thành từng phần nhỏ và riêng biệt, bạn có thể kiểm tra các phần đó.

Nếu bạn muốn tự kiểm tra tệp asmx, bạn đang nói về thử nghiệm tích hợp. Bạn có thể sử dụng NUnit cho điều đó theo cách bạn mô tả, nhưng đó không phải là thử nghiệm đơn vị thực sự.

+0

Tôi muốn UNIT kiểm tra các phương pháp trong. asmx.cs. Vì vậy, câu hỏi của tôi vẫn chưa được giải quyết bởi vì trong dự án thử nghiệm đơn vị của tôi, tôi đoán tôi không chắc chắn làm thế nào để thực hiện cuộc gọi đến .asmx.cs. Nói cách khác, nếu dịch vụ của tôi được gọi là MyService.asmx, tôi muốn tạo một đơn vị kiểm tra MyServiceTest để kiểm tra các phương thức .asmx.cs cụ thể. Tôi cần cả hai kiểm tra như thể tôi là một người tiêu dùng của servcie VÀ thử nghiệm đơn vị cùng một lúc để biết nếu tôi nhận được bất kỳ lỗi nào bên trong bất kỳ phương thức .asmx.cs nào. Về cơ bản, tôi tạo ra một dịch vụ nội bộ và sếp của tôi sẽ sử dụng nó. Chỉ cần thực hiện với các phương pháp. – PositiveGuy

+0

Vì vậy, tôi đoán câu hỏi của tôi vẫn đứng vững. Tôi đã tạo giải pháp MyTestProject và trong đó một dự án C# sẽ giữ các lớp thử nghiệm của tôi. Sau đó, thêm dự án web vào cùng một giải pháp và muốn kiểm tra các cuộc gọi đến .asmx và cũng kiểm tra đơn vị các phương thức trong .asmx.cs – PositiveGuy

+0

Bạn có thể di chuyển các phương thức ra khỏi asmx.cs (ít nhất là các phần cần phải thử nghiệm) vào một lớp học mới và kiểm tra điều đó? – Davy8

0

Giống như Lodewijk đã nêu, cách tốt nhất là không kiểm tra đơn vị tệp asmx. Thay vào đó, trích xuất logic từ tệp đó thành các tệp lớp xử lý hành vi bạn đang theo dõi. Bằng cách đó bạn có thể sau đó đơn vị kiểm tra các lớp đó trong sự cô lập từ giao diện người dùng. Bạn có thể thấy rằng vấn đề thực sự của bạn là có quá nhiều logic nghiệp vụ trong lớp giao diện người dùng của bạn.

Nếu bạn muốn tự mình kiểm tra tệp asmx, bạn sẽ muốn xem xét kiểm tra thủ công, kiểm tra tích hợp hoặc thử nghiệm chấp nhận ... nhưng nếu bạn có thể di chuyển logic của mình sang lớp doanh nghiệp, bạn có thể sẽ tìm thấy dễ dàng hơn để kiểm tra.

+0

Tôi đã có một dự án BL cho điều đó. Dù sao cũng cảm ơn. Đây là các trình bao bọc xung quanh các cuộc gọi BL. – PositiveGuy

1

Thật không may, đây là vấn đề với các dịch vụ web .asmx, chúng phụ thuộc vào ASP.net, cách tiếp cận tốt nhất là giữ dịch vụ web .asmx dưới dạng khai và trích logic dịch vụ web của bạn thành phụ thuộc sạch - kiểm tra đơn vị và lớp học miễn phí thay thế. Cách khác là chạy các kiểm thử tích hợp.

Về lâu dài, nếu kiểm tra đơn vị là quan trọng đối với bạn, bạn có thể tốt hơn khi phát triển bằng cách sử dụng web service framework được thiết kế với thử nghiệm đơn vị ngay từ đầu.

3

Bạn có thể thiếu điểm của những gì người khác đang nói. Tệp .asmx phải có không có giá trị logic nào thử nghiệm. Nếu nó thực sự chỉ là một wrapper xung quanh các cuộc gọi lớp kinh doanh, sau đó nó không thêm gì và không cần phải được kiểm tra. Nếu nó thêm một cái gì đó, giải nén cho đến khi .asmx không chứa gì ngoài một cuộc gọi thông qua.

Tệp .asmx của bạn có chứa gì không thể được tách ra thành các lớp riêng biệt, có thể kiểm chứng?

+0

Đó là trình bao bọc với logic bổ sung như ghi nhật ký, v.v. Nó đi qua dự án trình bao bọc PayPal của tôi và gọi hàm bao ở đó ... nhưng trình đóng gói không phải lúc nào cũng đi qua mà không thực hiện ghi nhật ký, cập nhật các bản ghi SOME về phía chúng tôi, v.v. – PositiveGuy

+0

Tôi có thể đoán trích xuất thành các lớp riêng biệt. Tôi sẽ chỉ sao chép các phương thức vào một số lớp Test và thêm lớp đó vào dự án thử nghiệm của tôi sau đó. – PositiveGuy