J'essaie de tester le code que j'ai obtenu à partir d'un exemple DotNetOpenAuth mais j'ai du mal à faire fonctionner l'UrlHelper dans mes tests.Unit Test Url.Action
Quelque part sur le résultat de l'action LogOn sur mon contrôleur, il appelle le UrlHelper suivant. L'exemple suivant est une version simplifiée de ce ActionResult.
public ActionResult TestUrlHelper()
{
var test = Url.ActionFull("LogOnReturnTo");
return View();
}
Mon test ressemble à ceci:
[Test]
public void TestTest()
{
AccountController controller = GetAccountController();
var result = controller.TestUrlHelper();
}
Ceci est la méthode d'extension pour la UrlHelper:
internal static Uri ActionFull(this UrlHelper urlHelper, string actionName)
{
return new Uri(urlHelper.RequestContext.HttpContext.Request.Url,
urlHelper.Action(actionName));
}
La méthode GetAccountController je suis arrivé de la question suivante. J'ai essayé d'ajuster un peu les réglages à mes besoins mais je dois admettre que je ne comprends pas tout à fait.
private static AccountController GetAccountController()
{
var MockIFormsAuthentication = new Mock<IFormsAuthentication>();
var MockIOpenIdRelyingParty = new Mock<IOpenIdRelyingParty>();
var MockRealm = new Realm("http://www.google.be");
var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.SetupGet(x => x.ApplicationPath).Returns("/");
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/Account/LogOnReturnTo", UriKind.Absolute));
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.Setup(x => x.ApplyAppPathModifier("/Account/LogOnReturnTo")).Returns("http://localhost/Account/LogOnReturnTo");
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
context.SetupGet(x => x.Response).Returns(response.Object);
var Controller = new AccountController(MockIFormsAuthentication.Object, MockIOpenIdRelyingParty.Object, MockRealm);
Controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), Controller);
Controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);
return Controller;
}
L'erreur que je reçois est:
HttpResponseBase.ApplyAppPathModifier ("/ home/LogOnReturnTo") appel a échoué avec le comportement simulé Strict.
Toute aide ou un coup de pouce dans la bonne direction est très apprécié
Vous voudrez peut-être swith à MockBehavior.Loose, alors :) Que wo Je serais une bonne idée en général. –