Comment peut-résolution voie / action test I d'URL avec la chaîne de requête?
-
04-10-2019 - |
Question
Je suis en train de utiliser le code tel que le suivant dans mes tests unitaires,
/* Test setup code */
_routes = RouteTable.Routes;
MvcApplication.RegisterRoutes(_routes); //set up the routes as they would be in actual application
/* test code */
Expression<Func<SearchController, ActionResult>> actionFunc;
actionFunc = action => action.Results("x", 3, null);
RouteTestingExtensions.Route(
"~/Search/Results?searchText=x"
).ShouldMapTo<SearchController>(actionFunc);
Le problème est, ce échoue avec « Résultats escomptés a Résultats? SearchText = x »
Quelqu'un at-il une solution qui me permettrait de tester qu'une URL (avec chaîne de requête) décide de le contrôleur correct, l'action et des arguments?
Pour votre information, je n'ai pas une configuration de l'itinéraire explicite dans Global.asax.cs, comme la route par défaut fonctionne pour l'application réelle -. Il n'a tout simplement pas de travail dans ce test
La solution
à mon humble avis, il est logique de test unitaire seulement des itinéraires personnalisés. Test que les paramètres de chaîne de requête seront traduites aux arguments d'action du contrôleur est inutile et ne donne pas vraiment de la valeur à votre application. Ce travail est effectué par le liant modèle par défaut et est l'unité testé par Microsoft (je l'espère).
Ceci dit MVCContrib.TestHelper
vous permet de tester des itinéraires personnalisés avec élégance. Supposons par exemple que vous avez mis en œuvre radiomessagerie dans votre application et définir un itinéraire personnalisé pour avoir de jolies urls pour le référencement:
routes.MapRoute(
"Custom",
"foo/{startPage}/{endPage}",
new
{
controller = "Search",
action = "Results",
}
);
et est ici le contrôleur associé:
public class SearchController : Controller
{
public ActionResult Results(int startPage, int endPage)
{
return View();
}
}
Cette route pourrait être testé comme ceci:
"~/foo/10/20".ShouldMapTo<SearchController>(c => c.Results(10, 20));
Cela permettra de tester efficacement que le contrôleur par défaut est Search
, l'action par défaut est Results
et que les deux paramètres de startPage
et endPage
seront initialisées à leurs valeurs respectives de la route.
Autres conseils
Peut-être que ces articles par Phil Haack contribueront à: