Как выполнить модульный тест HandleUnknownAction () контроллера ASP.NET MVC? - PullRequest
3 голосов
/ 06 февраля 2009

У меня установлен следующий HandleUnknownAction на моем базовом классе контроллера:

protected override void HandleUnknownAction(string action)
{
    Response.Redirect("/");
}

Как мне это проверить? Другой момент, является ли этот способ обработки неизвестного действия правильным? Кажется, что вызов RedirectToAction () будет более правильным, но HandleUnknownAction не имеет возвращаемого значения.

Насколько я мог проверить это:

[Test]
public void TestHandleUnknownAction()
{
    ctroler.ActionInvoker.InvokeAction(ctroler.ControllerContext, "unknown");
}

Я застрял в этом.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2009

Я не думаю, что нужно проверять, что HandleUnknownAction вызывается, когда в контроллере отсутствует действие. Мы доверяем структуре, чтобы справиться с этим. Таким образом, мы можем протестировать реализацию, вызвав HandleUnknownAction напрямую с помощью фреймворка Moq . Также должно быть возможно с Rhino Mocks .

public void TestHandleUnknownAction()
{
    Mock<ControllerContext> cc = new Mock<ControllerContext>
                                           (MockBehavior.Strict);
    cc.Expect(c => c.HttpContext.Response.Redirect("/"));

    TestHelperController controller = new TestHelperController();
    controller.ControllerContext = cc.Object;

    controller.InvokeUnknownAction("test");
}

Где TestHelperController делает доступным HandleUnknownAction:

public class TestHelperController : RealController
{
    public void InvokeUnknownAction(string action)
    {
        this.HandleUnknownAction(action);
    }
}
1 голос
/ 23 июня 2009

Это хорошо для простого Response.Redirect, но этот код модульного теста не будет работать, если вы захотите сделать что-то более сложное, например, рендеринг вида ошибки:

// TODO - Put some stuff into ViewData or a model
View("Error").ExecuteResult(Me.ControllerContext)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...