Модульное тестирование asp.net mvc restful routing FormatResult - PullRequest
4 голосов
/ 16 декабря 2011

Я использую модуль маршрутизации restful для asp.net mvc и очень доволен этим. Но я не могу получить одну вещь. Например, у меня было действие контроллера как это:

public ActionResult Index()
{
    if (Request.IsAjaxRequest()) 
        return PartialView();
    return View();
}

И не было проблем с написанием спецификации, подобной этой:

[Subject(typeof(LotsController))]
public class When_Index_called
{
    static LotsController controller;

    static ActionResult actionResult;

    Establish context = () => {
        controller = mocker.Create<LotsController>();
        controller.ControllerContext = Contexts.Controller.Default;
    };

    Because of = () => actionResult = controller.Index();

    It should_render_view = () => actionResult.AssertViewRendered().ForViewWithDefaultName();

Но с использованием rest, я хочу использовать метод Index, подобный этому:

public ActionResult Index()
{
    return RespondTo(format => {
        format.Html = () => {
            if (Request.IsAjaxRequest()) 
                return PartialView();
            return View();
        };
        format.Json = () => Json(new { });
    });
}

Убедитесь, что предыдущая спецификация не выполнена, поскольку результат действия не относится к типу ViewResult, а к типу FormatResult. FormatResult переопределяет метод ExecuteResult, который возвращает void. Как мне выполнить модульное тестирование такого случая, если я хочу проверить типы результатов действий и данные внутри FormatResult?

Ответы [ 3 ]

1 голос
/ 19 декабря 2011

В будущей версии restful-маршрутизации возможен такой код:

var formatResult = actionResult as FormatResult;
ActionResult result = formatResult.ExposeResult().Html();
result.ShouldBeOfType<ViewResult>();
0 голосов
/ 17 декабря 2011

Зависит от того, к какому запросу будет использован ActionResult. Эта логика имеет место при запуске метода ExecuteResult FormatResult. Лучшим способом решения этой проблемы является рефакторинг класса FormatResult, чтобы вы могли получить выбранный ActionResult без его выполнения. Запросы на извлечение приветствуются:)

Поскольку единственный способ проверить это, это запустить метод ExecuteResult и проверить результат.

0 голосов
/ 16 декабря 2011

Может ли утверждение использовать имя возвращенного представления?

Это не даст вам формат, но позволит протестировать возвращенное представление.

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