2010-05-24 3 views
0

J'ai du mal à comprendre ce dont j'ai besoin pour me moquer de mes tests afin de montrer que UrlHelper.RouteUrl() renvoie la bonne URL. Cela fonctionne, mais j'aimerais avoir la bonne couverture de test. La viande de la méthode du contrôleur ressemble à ceci:Comment tester UrlHelper.RouteUrl()?

var urlHelper = new UrlHelper(ControllerContext.RequestContext); 
return Json(new BasicJsonMessage { Result = true, 
    Redirect = urlHelper.RouteUrl(new { controller = "TheController", 
    action = "TheAction", 
    id = somerecordnumber }) }); 

Test de l'objet résultat est assez facile, comme ceci:

var controller = new MyController(); 
var result = controller.DoTheNewHotness()); 
Assert.IsInstanceOf<JsonResult>(result); 
var data = (BasicJsonMessage)result.Data; 
Assert.IsTrue(data.Result); 

result.Redirect est toujours nulle, car le contrôleur ne sait évidemment rien à propos du routage. Qu'est-ce que je dois faire au contrôleur pour le faire savoir? Comme je l'ai dit, je sais que cela fonctionne quand j'exerce le code de production, mais j'aimerais avoir une assurance de test. Merci de votre aide!

+0

Je ressens votre douleur. Il n'y a aucun moyen de vérifier que vos appels à RouteUrl produiront le résultat souhaité à court d'un test d'intégration. –

Répondre

1

La méthode du cadre n'est-elle pas UrlHelper.RouteUrl()? C'est la responsabilité de l'équipe .NET de tester, pas la vôtre!

Ce que vous pourriez vouloir faire est de tester votre unité configuration de route. This question est vraiment vieux (MVC Beta 1), mais la réponse pourrait être encore valide. Et Phil HaackRouting Debugger est toujours là pour vous. Si cela ne suffit pas, il y a des tonnes d'autres options sur Google.

+0

Dans ce cas, je ne teste pas le code de l'infrastructure autant que je veux tester que le code de l'infrastructure obtient les bonnes données de moi. Cela a-t-il du sens? –

+0

@Jeff, d'une certaine manière, mais il semblerait que vous fassiez un pas de trop. Avez-vous vérifié le testeur d'itinéraire fluide? http://flux88.com/blog/fluent-route-testing-in-asp-net-mvc/ –

2

Il me semble que vous essayez de tester votre propre code qui invoque un UrlHelper plutôt que de tester la fonctionnalité de l'UrlHelper du framework lui-même. Si tel est le cas, cette réponse ASP.NET MVC: Unit testing controllers that use UrlHelper a bien fonctionné pour moi.