2010-05-07 47 views
15

Dự án hiện tại của tôi có trụ sở tại Asp .net sử dụng đáng kể các trình xử lý Http để xử lý các yêu cầu khác nhau? Vì vậy, có cách nào mà tôi có thể kiểm tra các chức năng của mỗi xử lý bằng cách sử dụng các trường hợp thử nghiệm đơn vị? Chúng tôi đang sử dụng khung Nunit và Moq để tạo điều kiện thử nghiệm đơn vị.Kiểm tra đơn vị http xử lý?

Trả lời

1

Bạn chắc chắn có thể, mặc dù tôi chưa tự làm "tức giận".
Sử dụng System.Net.WebClient để thực hiện các cuộc gọi HTTP với trình xử lý của bạn và đánh giá những gì sẽ trả về, điều đó sẽ cho phép bạn kiểm tra giao diện công khai của trình xử lý.

Trong ví dụ này tôi đã mã hóa cứng mục tiêu của mình và tôi đang sử dụng phương thức trên WebClient sẽ trả về một chuỗi.

WebClient cũng cung cấp cho bạn quyền truy cập vào ResponseHeaders, Encoding và các công cụ 'webby' hữu ích khác; bạn cũng có thể tải lên thông tin.

using System.Net; 

namespace UnitTestHttpHandler 
{ 
    public class TestHarness 
    { 
     public static string GetString() 
     { 
      WebClient myWebClient = new WebClient(); 
      return myWebClient.DownloadString("http://localhost/Morphfolia.Web/ContentList.ashx"); 
     } 
    } 
} 

Sau đó bạn có thể sử dụng TestHarness gọi mục tiêu HttpHandler và xác minh các kết quả trong các thử nghiệm của bạn (hoặc sử dụng một cách tiếp cận tốt hơn để thử nghiệm của bạn nếu bạn biết một - Tôi không phải là một thử nghiệm đơn vị guru).

[TestMethod] 
    public void TestMethod1() 
    { 
     string x = UnitTestHttpHandler.TestHarness.GetString(); 

     Assert.IsTrue(x.Length > 5); 
    } 
+1

Nhưng chúng ta cần định tuyến (sử dụng tệp cấu hình) yêu cầu đến trình xử lý chính xác và máy chủ cũng cần phải chạy, phải không? Vậy làm thế nào để mô phỏng điều đó? –

+0

Có, máy chủ web sẽ cần phải chạy. Theo như cấu hình đi, tôi không thể nói từ kinh nghiệm nhưng tôi sẽ giả sử nó sẽ được thực hiện trong một cách tương tự để xác định các thiết lập khác thông qua cấu hình khi kiểm tra đơn vị (?). Xin lỗi tôi không thể cung cấp nhiều hơn thế. –

+0

Điều này thực sự hoạt động rất tốt, chỉ có vấn đề là bạn không thể gỡ lỗi thông qua trình xử lý đích của bạn tất nhiên. – Brent

0

Bạn có thể làm thử nghiệm tích hợp các trình điều khiển bằng cách sử dụng các phương pháp được đề cập trong câu trả lời khác, để làm kiểm tra đơn vị bạn sẽ cần phải tạo ra một số giao diện và trích xuất các chức năng cốt lõi ra khỏi xử lý, cũng như tạo ra một số đối tượng giả.

Bạn sẽ không thể kiểm tra đơn vị TẤT CẢ các bộ phận của nó vì nó dựa vào tài nguyên bên ngoài (những thứ bạn sẽ chế nhạo) - nhưng tốt thôi, đó là lý do tại sao chúng tôi CÓ thử nghiệm tích hợp.

0

Nếu bạn muốn kiểm tra thông tin liên lạc giữa các trình xử lý và giao diện người dùng web thì có, thử nghiệm tích hợp là cách để thực hiện điều đó. Để đơn vị kiểm tra logic của bạn, bạn có thể không tách logic nghiệp vụ của mình thành các lớp khác (tôi sử dụng một assembly riêng cho lớp nghiệp vụ) và thử nghiệm/thử nghiệm các lớp này thay vì ngoài lớp trình bày của bạn?

Khi bạn có lớp kinh doanh có cấu trúc (và đơn vị được kiểm tra) đã được tách khỏi lớp trình bày, trình xử lý của bạn có thể đơn giản khởi tạo các concretes của bạn và gọi các phương thức đã cung cấp. Một khi điều này được thực hiện, sau đó bạn có thể di chuyển vào thử nghiệm tích hợp như logic kinh doanh của bạn sẽ được đơn vị thử nghiệm.

2

Nếu bạn không chăm sóc về các xét nghiệm đơn vị và muốn một cái gì đó nhanh chóng và dơ bẩn, bạn có thể sử dụng Fiddler

nếu bạn muốn có một cách tiếp cận (thử nghiệm Unit) tích hợp nhiều hơn bạn có thể sử dụng WebRequest và WebResponse.