Aspnetcore: La création d'un UrlHelper avec ActionContext() entraîne une NullReferenceException

Créé le 15 janv. 2019  ·  3Commentaires  ·  Source: dotnet/aspnetcore

Décrivez le bogue

Essayer de créer un URLHelper à des fins de test à l'aide d'ActionContext() lève une NullReferenceException.

Reproduire

Étapes pour reproduire le comportement :

  1. Créer une solution MVC core 2.2 vide
  2. Créer un projet de test xunit
  3. Installez le NuGet Microsoft.AspNetCore.Mvc.Core 2.2.0
  4. Écrivez dans le test : var Url = new UrlHelper(new ActionContext());
  5. Exécuter le test

Comportement prévisible

Lance un message : System.NullReferenceException : référence d'objet non définie sur une instance d'un objet.

Contexte supplémentaire

Le rapport de bogue peut également être trouvé sur StackOverflow :
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper

bug

By Design area-mvc

Tous les 3 commentaires

Ce qui se passe ici, c'est que le UrlHelper essaie d'accéder à la propriété RouteData du ActionContext pour vérifier s'il contient des valeurs, provoquant ainsi l'exception. Pour résoudre ce problème, vous pouvez faire :

var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );

Ce constructeur spécifique est documenté pour être utilisé pour les tests unitaires, plus précisément lorsque le ActionContext doit simplement être transmis, mais pas utilisé par le code consommateur. Le configurer de la manière suggérée par @navelDirt serait la voie à suivre.

Pour aller plus loin, si vous avez l'intention de tester unitairement si un morceau de code produit une URL spécifique, vous aurez plus de succès en utilisant un stub \ mock IUrlHelper . Si vous avez besoin de vérifier le résultat réel, je vous recommande fortement d'écrire un test d'intégration

Merci beaucoup @navelDirt et @pranavkm.
J'étais confus car dans le noyau 1.1, cela fonctionnait sans définir le RouteData, mais en passant à 2.2, il s'est écrasé. C'est pourquoi j'ai pensé que c'était un bug... désolé pour le dérangement.

Cette page vous a été utile?
0 / 5 - 0 notes