2012-05-25 15 views
5

ho questo metodo di controllo:Come verificare un percorso MVC con querystring opzionale parametri

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

sto cercando di testare con MvcContrib percorso di prova:

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

Tuttavia, restituisce questo errore.

Fallimento: MvcContrib.TestHelper.AssertionException: Rapporto parametro 'sortby' non corrisponde: previsto '' ma era ''; nessun valore trovato nel parametro di azione del contesto del percorso denominato 'sortby' - la tua rotta corrispondente contiene un token chiamato 'sortby'?

Cosa mi manca?

+1

Penso che i primi test falliscono :: '" ~/whatever/list ".ShouldMapTo (c => c.Index (string.Empty, string.Empty));' prova con 'null' invece di' string.Empty' perché 'null' è il valore predefinito di' string'. – nemesv

+0

Se dovessi farlo come risposta, segnerei la risposta. Sembrava farlo, non so perché non mi ha colpito. –

risposta

3

Sulla base del messaggio di asserzione (expected '' but was ''; così uno dei valori è null o string.Empty nel assertation) il primo test non riesce, perché si è utilizzato string.Empty ma il valore predefinito per stringa è null

Cambia la tua assert a uso null e dovrebbe wotk:

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

Cosa succede se i parametri dell'Indice erano ints? Quindi non puoi passare nulla, come faresti quel test pass (senza cambiare il metodo del controller ad eccezione di nullable)? – BornToCode

+0

Quindi suppongo che avresti bisogno di usare '0' perché questo è il valore predefinito di int. Quindi il tuo asser apparirebbe come '" ~/whatever/list ".ShouldMapTo (c => c.Index (0, 0));' ma non posso essere sicuro di non vedere il tuo controller e le tue configurazioni di routing – nemesv

+0

In realtà questo è quello che ho provato, ma l'azione del controller ha accettato int e l'asserzione fallisce perché diventa nullo invece (che non posso passare come non nullable int) - 'atteso '0' ma era ''' – BornToCode

2

ho usato come

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")); 
Problemi correlati