Una delle azioni del mio controller, una che viene chiamata in una richiesta Ajax, restituisce un URL al lato client in modo che possa eseguire un reindirizzamento. Sto usando Url.RouteUrl(..)
e durante i miei test di unità questo fallisce poiché il parametro Controller.Url
non è precompilato.ASP.NET MVC: unità di controllo dei controller che utilizzano UrlHelper
ho provato un sacco di cose, tra gli altri, che tentano di stub UrlHelper
(che non è riuscito), creare manualmente un UrlHelper
con un RequestContext
che ha un stubbed HttpContextBase
(che non è riuscito in una chiamata RouteCollection.GetUrlWithApplicationPath
).
Ho cercato su Google ma non ho trovato praticamente nulla sull'argomento. Sto facendo qualcosa di incredibilmente stupido usando Url.RouteUrl
nell'azione del mio controller? C'è un modo più semplice?
Per renderlo ancora peggio, mi piacerebbe essere in grado di testare l'URL restituito nel mio test di unità - in realtà sono interessato solo a sapere che sta reindirizzando sulla giusta rotta, ma dal momento che sto restituendo un URL invece di una rotta, vorrei controllare l'URL che è stato risolto (ad esempio utilizzando uno stoppato RouteCollection
), ma sarò felice di far passare il mio test dall'inizio.
Per il momento sono andato con una soluzione in cui ho estratto le chiamate a UrlHelper in modo da poterle intercettare. Grazie per il tuo frammento, tuttavia, mi salverà un sacco di tempo per capire come deridere correttamente una richiesta/risposta/ControllerContext. – efdee
Grazie per la risposta @ eu-ge-ne, mi ha aiutato molto. Ho incluso alcune altre configurazioni di moq per utilizzare un parametro di formcollection utilizzato da UpdateModel – woopstash
+1 eccellente. Anche se un suggerimento: io uso questo come MockHelper e cambio la risposta. Setup per ApplyAppPathModifier a questo: response.Setup (x => x.ApplyAppPathModifier (Moq.It.IsAny())).Restituisce ((String url) => url); È brutto, ma restituisco l'oggetto serializzato nella forma codificata url, invece di codificare il valore restituito. –
eduncan911