Юнит Тест Действие - PullRequest
       8

Юнит Тест Действие

3 голосов
/ 05 марта 2010

Я пытаюсь выполнить модульное тестирование кода, полученного из примера DotNetOpenAuth, но мне трудно заставить UrlHelper работать в моих тестах.

Где-то в 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, который я получил из следующего вопроса . Я попытался немного отрегулировать настройки в соответствии со своими потребностями, но должен признать, что не совсем все понимаю.

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 ("/ Home / LogOnReturnTo") с ложным поведением Strict.

Любая помощь или толчок в правильном направлении высоко ценится

1 Ответ

2 голосов
/ 15 марта 2011

MockBehavior.Strict будет

Заставьте mock вести себя как «настоящий Mock», вызывая исключения для всего, что не имеет соответствующего ожидания.

(из Moq wiki )

Так что, если вы установите MockBehavior на Loose, это:

никогда не генерирует и не возвращает значения по умолчанию или пустые массивы, перечислимые значения и т. Д., Если для элемента не установлено ожидание

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...