Я пытаюсь выполнить тестирование кода, который я получил из примера DotNetOpenAuth, но мне трудно заставить UrlHelper работать в моих тестах.Unit Test Url.Action
Где-то на LogOn ActionResult на моем контроллере он вызывает следующий UrlHelper. Следующий пример - упрощенная версия ActionResult.
public ActionResult TestUrlHelper()
{
var test = Url.ActionFull("LogOnReturnTo");
return View();
}
Мой тест выглядит примерно так:
[Test]
public void TestTest()
{
AccountController controller = GetAccountController();
var result = controller.TestUrlHelper();
}
Это метод расширения для UrlHelper:
internal static Uri ActionFull(this UrlHelper urlHelper, string actionName)
{
return new Uri(urlHelper.RequestContext.HttpContext.Request.Url,
urlHelper.Action(actionName));
}
Метод GetAccountController я получил из следующего question. Я попытался немного подстроить настройки к моим потребностям, но я должен признать, что полностью не понимаю.
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;
}
Ошибка я получаю:
HttpResponseBase.ApplyAppPathModifier ("/ Главная/LogOnReturnTo") вызов не удалось с притворным поведением Strict.
Любая помощь или толчок в правильном направлении, высоко ценится
Возможно, вы захотите поиграть в MockBehavior.Loose, then :) That wo uld будет хорошей идеей в целом. –