Essayer de créer un URLHelper à des fins de test à l'aide d'ActionContext() lève une NullReferenceException.
Étapes pour reproduire le comportement :
Lance un message : System.NullReferenceException : référence d'objet non définie sur une instance d'un objet.
Le rapport de bogue peut également être trouvé sur StackOverflow :
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper
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.