Je développe une application web Asp.net mvc. Je fais des tests unitaires pour mon application. J'utilise Moq pour simuler des objets. J'essaie de simuler la classe Url helper. J'ai trouvé ce lien asp.net mvc : comment simuler Url.Content("~") ? . En utilisant cette classe, je peux simuler UrlHelper
dans le test unitaire.
J'ai créé un BaseController
comme ceci
public class BaseController : Controller
{
private IUrlHelper _urlHelper;
public new IUrlHelper Url
{
get { return _urlHelper; }
set { _urlHelper = value; }
}
}
Voici le IUrlHelper
interface/abstraction
public interface IUrlHelper
{
string Action(string actionName);
string Action(string actionName, object routeValues);
string Action(string actionName, string controllerName);
string Action(string actionName, RouteValueDictionary routeValues);
string Action(string actionName, string controllerName, object routeValues);
string Action(string actionName, string controllerName, RouteValueDictionary routeValues);
string Action(string actionName, string controllerName, object routeValues, string protocol);
string Action(string actionName, string controllerName, RouteValueDictionary routeValues, string protocol, string hostName);
string Content(string contentPath);
string Encode(string url);
string RouteUrl(object routeValues);
string RouteUrl(string routeName);
string RouteUrl(RouteValueDictionary routeValues);
string RouteUrl(string routeName, object routeValues);
string RouteUrl(string routeName, RouteValueDictionary routeValues);
string RouteUrl(string routeName, object routeValues, string protocol);
string RouteUrl(string routeName, RouteValueDictionary routeValues, string protocol, string hostName);
}
Je me moque de la Url.Content()
dans le test unitaire comme ceci
Mock<IUrlHelper> urlHelperMock = new Mock<IUrlHelper>();
urlHelperMock
.Setup(x => x.Content(It.IsAny<string>()))
.Returns<string>(x => "~/" + x);// Mock Content method of Url Helper
Le test a été effectué avec succès et fonctionne bien. Le problème est que je ne peux pas l'utiliser dans une application en temps réel. Je veux dire que lorsque je lance mon application et que j'appelle Url.Content("path"), l'exception null est levée.
Par exemple
public class ExampleController : BaseController
{
public string GetPath()
{
return Url.Content("~/Path/To/File");
}
}
Url.Content
dans ce code lance l'exception null. Il fonctionne bien dans le test unitaire. Comment puis-je corriger ce code ?