2011-07-12 27 views
6

Làm cách nào để kiểm tra chức năng bộ điều khiển/bộ điều khiển mvc .net..net MVC functional testing

Tôi vừa xuất phát từ nhiều năm phát triển Rails thành một hợp đồng biểu diễn mà tôi đang truy cập .net mvc. Nó đau nhưng tôi hy vọng rằng một phần lớn của điều này chỉ là đường cong học tập.

Điều không rõ ràng đối với tôi là tương tự cho kiểm tra chức năng và tích hợp Rails trong thế giới .NET. Rails làm cho việc kiểm tra chức năng trở nên rõ ràng và đơn giản đến nỗi bạn sẽ ngu ngốc không dành thời gian để có được sự bảo hiểm tại chỗ. Với .NET - Tôi chưa có được Google để mang lại một kết quả duy nhất có vẻ đáng giá. Tôi hy vọng đó là trạng thái .net mới thành lập của tôi, điều đó chỉ giữ cho tôi không được nhập các từ tìm kiếm phù hợp hoặc thiếu một số mô hình.

Giúp đỡ!

+0

Hành động của bộ điều khiển chỉ đơn giản là phương pháp và có thể được kiểm tra như vậy (sử dụng giả mạo/chế nhạo để cách ly). Có điều gì đặc biệt hơn đối với thử nghiệm chức năng hơn mẫu Arrange, Act, Assert cho từng điều kiện và cung cấp các trường hợp cụ thể của các lớp để ngăn cách ly và kiểm tra toàn bộ ứng dụng không? – StuperUser

+2

Một phần lý do có thể là thuật ngữ. Trong thế giới Rails chúng ta nói về các bài kiểm tra chức năng, nhưng chúng tôi thực sự có nghĩa là các bài kiểm tra đơn vị cho các bộ điều khiển của chúng ta. Từ những gì tôi đã thấy hầu hết các lập trình viên Rails trộn các bài kiểm tra đơn vị thực sự (chỉ kiểm tra mã) và các bài kiểm tra chức năng (bao gồm cả các phụ thuộc bên ngoài như một cơ sở dữ liệu) với nhau. Cộng đồng .NET dường như theo dõi những người đó chặt chẽ hơn. Roy Osherove có một cuốn sách tốt về thử nghiệm trong .NET http://artofunittesting.com/ –

Trả lời

0

Nếu bạn thực sự muốn thử nghiệm chức năng, trái ngược với thử nghiệm "đơn vị" chuẩn, bạn có một vài lựa chọn.

  1. Tạo quảng cáo và sử dụng kiểm tra MS để thiết lập các thử nghiệm dựa trên chức năng khác.
  2. sử dụng một loại BDD khung (specFlow?)
  3. sử dụng một khuôn khổ thử nghiệm chức năng hơn, như Selenium

Nếu bạn đang hướng tới việc thử nghiệm chức năng hướng tự động hơn UAT, bạn cũng có các mục như FIT Khung (và Fitnesse).

Đây có phải là sự tương tự trực tiếp với công cụ và khung công tác trong Rails không? Không, nhưng .NET không phải là Rails.

+0

Quyền - hiểu rằng đó là táo và cam. Câu hỏi thực sự cần phải đọc: "Cách thích hợp để kiểm tra chức năng một bộ điều khiển/hành động mvc" là gì. Không biết nếu có một mô hình quy định hoặc nếu nó đã được mở kết thúc. Tôi cho rằng tôi đang tìm hướng dẫn cho người mới bắt đầu. – Cory

+0

@Cory, xem nhận xét của tôi về bài đăng gốc về thuật ngữ "kiểm tra đơn vị" và "thử nghiệm chức năng". Tôi cũng đã đề nghị một cuốn sách :) –

+0

@Wizard - đã đồng ý về sự khác biệt. cảm ơn cho con trỏ. – Cory

3

Hãy tha thứ cho tôi vì thiếu kiến ​​thức về Rails, và cho bạn biết những gì bạn đã biết về đường ray, nhưng tôi hy vọng sẽ đưa mọi thứ vào một định dạng so sánh cho người dùng khác.

Đường ray có 3 loại kiểm tra Đơn vị, Chức năng và Tích hợp.

Unit Tests thử nghiệm mô hình của bạn

chức năng thử nghiệm về điều khiển của bạn

thử nghiệm tích hợp để thử nghiệm các dòng chảy giữa điều khiển Actions

mô hình này dường như được dạy ngay từ đầu với đường ray.

Tuy nhiên trong thế giới .NET MVC, các phương pháp thử nghiệm không được trình bày giống như chúng ở trong Rails.

Nhiều nhà phát triển sẽ viết Bài kiểm tra đơn vị trên bộ điều khiển của họ theo cách bạn viết Bài kiểm tra đơn vị trên Mô hình của bạn trong đường ray. Về cơ bản, bạn gọi một phương thức (Controller Action) và lấy một đối tượng trở lại từ phương thức. Sau đó bạn có thể khẳng định nó có các giá trị bạn mong đợi. Làm điều này là một nỗi đau ở mông bởi vì bạn phải chế nhạo rất nhiều crap (HttpContext vv). Thêm vào đó, nó không phải là một thử nghiệm chức năng. Bạn chỉ đang thử nghiệm một phương pháp trái ngược với kiểm tra chức năng của ứng dụng.

Trong Rails bạn không viết một bài kiểm tra đơn vị trên bộ điều khiển của bạn, bạn đang thực sự thực hiện một yêu cầu web và bạn nhận được một phản ứng web. Bạn có thể kiểm tra mã trạng thái, cookie, v.v. Bạn đang thử nghiệm hệ thống từ đầu đến cuối.

Có một số cách bạn có thể thực hiện việc này.NET MVC

1) Steven Sanderson có một công cụ nhỏ để trợ giúp điều này.

http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/

Khi tôi lần đầu tiên nhìn thấy điều này và bắt đầu sử dụng nó, tôi nghĩ rằng nó là tuyệt vời, nhưng tôi chạy vào vấn đề.

2) RestSharp + NUnit - Đây là tùy chọn hiện tại của tôi để thực hiện các loại thử nghiệm này. Nó cho phép bạn đặt một yêu cầu web với nhau và nhận được một phản ứng khá dễ dàng. Với một vài phương pháp chung bạn có thể di chuyển khá nhanh với restsharp. NUnit sẽ cung cấp cho bạn các xác nhận bạn cần. Tôi chỉ cần thực hiện yêu cầu đối với máy chủ IIS cục bộ của tôi và xác nhận các mục khác nhau mà tôi mong đợi trong phản hồi. Bạn sẽ không thực sự có thể kiểm tra mô hình nào được gán cho khung nhìn như bạn có thể trong đường ray nhưng đó không phải là vấn đề đối với tôi.

Nếu bạn quen với RSpec thì bạn có thể lấy SpecFlow tương tự.

Đường ray xây dựng thử nghiệm ngay trong khuôn khổ và đó là công dân hạng nhất. Nó quá xấu nó không phải là cách này trong NET MVC.

Hy vọng điều đó sẽ hữu ích.

0

Cách tốt nhất để đơn vị kiểm tra ứng dụng MVC là thêm đơn vị thử nghiệm dự án mới bên trong giải pháp. Chỉ cần nhấp chuột phải vào giải pháp dự án, nhấn vào add rồi thêm -> test project.

Bạn sẽ thấy một lớp thử nghiệm sẽ có các phương thức có thuộc tính [TestMethod] trên đầu trang của chúng. Bạn sẽ viết logic thử nghiệm đơn vị của bạn trong các phương thức này.

Bên trong dự án thử nghiệm thêm tài liệu tham khảo mới .dll của dự án MVC mà thử nghiệm đơn vị sẽ được thực hiện. Điều này sẽ cho phép dự án thử nghiệm khám phá các hành động điều khiển thực tế của dự án chính.

Thêm tham chiếu vào không gian tên System.Web.MVC.

Vui lòng tham khảo một mẫu của một phương pháp thử nghiệm dưới đây:

[TestMethod] 
public void DisplayCustomer() 
{ 
    CustomerController obj = new CustomerController(); 
    var testResult = obj.DisplayCustomer(); 
    Assert.AreEqual("DisplayCustomer",testResult.ViewName); 
} 

xây dựng và chạy dự án để xem qua/kiểm tra thất bại trong Kết Quả Thi cửa sổ

Hope this helps!

Cảm ơn.