2012-05-25 11 views
5

mam tej metody kontrolera:Jak przetestować trasę MVC z opcjonalnym kwerendy parametry

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

próbuję przetestować go z testowaniem trasy MvcContrib:

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

Jednak ten wraca błąd.

Failure: MvcContrib.TestHelper.AssertionException: Wart parametru 'sortby' nie pasuje: oczekiwano '' ale ''; żadna wartość znaleźć w parametrze działania kontekstowego trasa o nazwie „sortby” - robi Twój dopasowywania trasa zawierać token o nazwie „sortby”?

Czego mi brakuje?

+1

myślę pierwsze testy braku :: ' "~/cokolwiek/listy" .ShouldMapTo (c => c.Index (string.Empty, string.Empty));' 'null' spróbuj zamiast' string.Empty' ponieważ 'null' jest domyślną wartością' string'. – nemesv

+0

Jeśli miałbyś to zrobić jako odpowiedź, zaznaczę odpowiedź. Wydawało się to robić, nie wiem, dlaczego to mnie nie uderzyło. –

Odpowiedz

3

podstawie komunikatu assert (expected '' but was ''; więc jedna z wartości jest null lub string.Empty w assertation) swój pierwszy test zawodzi, ponieważ użyłeś string.Empty ale wartość domyślną ciąg jest null

Zmień dochodzić używać null i powinno wotk:

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

Co się stanie, jeśli parametry Indeksu to ints? Wtedy nie możesz przekazać wartości null, w jaki sposób wykonasz test (bez zmiany metody kontrolera, z wyjątkiem zerowania)? – BornToCode

+0

Potem myślę, że musiałbyś użyć '0', ponieważ jest to domyślna wartość int. Więc dochodzić będzie wyglądać ' "~/cokolwiek/listy" .ShouldMapTo (c => c.Index (0, 0));' ale nie mogę być pewny, nie widząc kontrolera i swoje configs routingu – nemesv

+0

Właściwie to jest to, co próbowałem, ale akcja akceptowane int kontrolera, a nie dlatego, że twierdzenie to staje się zerowa zamiast (które nie mogą uchodzić za non zerowalne int) - 'oczekiwano„0”, ale był„”' – BornToCode

2

Kiedyś jak

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")); 
Powiązane problemy