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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top