2012-05-25 26 views
5

tôi có phương pháp điều khiển này:Làm thế nào để kiểm tra một con đường MVC với chuỗi truy vấn tùy chọn thông số

[GET("/whatever/list")] 
public ActionResult Index(string sortby, string order) 

Tôi đang cố gắng để thử nghiệm nó với MvcContrib tuyến đường thử nghiệm:

"~/whatever/list".ShouldMapTo<MyController>(c => c.Index(string.Empty, string.Empty)); 
"~/whatever/list?sortby=type&order=desc".ShouldMapTo<MyController>(c => c.Index("type", "desc")); 

Tuy nhiên, nó sẽ trả này lỗi.

Thất bại: MvcContrib.TestHelper.AssertionException: Giá trị cho thông số 'sortby' không khớp: expected '' nhưng was ''; không có giá trị được tìm thấy trong thông số hành động ngữ cảnh tuyến đường có tên 'sortby' - có phải tuyến đường phù hợp của bạn có chứa mã thông báo có tên 'sortby' không?

Tôi đang thiếu gì?

+1

Tôi nghĩ rằng các thử nghiệm đầu tiên thất bại :: '" ~/whatever/list ".ShouldMapTo (c => c.Index (string.Empty, string.Empty));' try with 'null' thay vì' string.Empty' vì 'null' là giá trị mặc định của' string'. – nemesv

+0

Nếu bạn làm điều đó như một câu trả lời, tôi sẽ đánh dấu câu trả lời. Điều đó dường như làm điều đó, tôi không biết tại sao điều đó không đánh tôi. –

Trả lời

3

Dựa vào thông điệp khẳng định (expected '' but was ''; vì vậy một trong các giá trị là null hoặc string.Empty trong assertation) thử nghiệm đầu tiên của bạn là không, bởi vì bạn sử dụng string.Empty nhưng giá trị mặc định cho chuỗi là null

Thay đổi khẳng định của bạn để sử dụng null và nó sẽ wotk:

"~/whatever/list".ShouldMapTo<MyController>(c => c.Index(null, null)); 
+0

Điều gì xảy ra nếu các tham số của Index là ints? Sau đó, bạn không thể vượt qua null, làm thế nào bạn sẽ làm cho rằng vượt qua thử nghiệm (mà không thay đổi phương pháp của bộ điều khiển để ngoại trừ nullable)? – BornToCode

+0

Sau đó, tôi đoán bạn sẽ cần phải sử dụng '0' bởi vì đó là giá trị mặc định của int. Vì vậy, khẳng định của bạn sẽ trông giống như '" ~/bất cứ điều gì/danh sách ".ShouldMapTo (c => c.Index (0, 0));' nhưng tôi không thể chắc chắn mà không nhìn thấy bộ điều khiển của bạn và cấu hình định tuyến của bạn – nemesv

+0

Thực tế điều này là những gì tôi đã thử, nhưng hành động của bộ điều khiển đã chấp nhận int và xác nhận không thành công vì nó bị null thay vì (mà tôi không thể chuyển thành int không null) - 'expected' 0 'nhưng là' '' – BornToCode

2

tôi sử dụng như

var route = "~/whatever/list".WithMethod(HttpVerbs.Get); 
route.Values.Add("sortby", "type"); 
route.Values.Add("order", "desc"); 
route.ShouldMapTo<MyController>(c => c.Index("type", "desc")); 
Các vấn đề liên quan