Модульное тестирование атрибута контроллера, который зависит от запрошенных параметров URL (ASP.NET MVC) - PullRequest
2 голосов
/ 16 марта 2011

У меня в основном есть базовый класс контроллера, который обрабатывает аутентификацию, проверяя токен в URL, например:

http://example/Home/Index будет не аутентифицирован

http://example/Home/Index?token=293029420932422823 будет аутентифицировано

Я хочу написать модульные тесты для этого, но не знаю, как это сделать. У меня есть:

    [TestMethod]
    public void NonsecureConnection()
    {
        var controller = new EONSecureController();
        Assert.IsTrue(string.IsNullOrEmpty(controller.EONToken));
        Assert.IsTrue(controller.tokenMode == EONSecureController.EONTokenModeEnum.None);
    }

Достаточно просто. Тестирование безопасных соединений - вот где я застрял.

    [TestMethod]
    public void SecureConnection()
    {
        var controller = new EONSecureController();
        // What to put here?
        Assert.IsTrue(!string.IsNullOrEmpty(controller.EONToken));
        Assert.IsTrue(controller.tokenMode==EONSecureController.EONTokenModeEnum.Client);
    }

Я пробовал разные подходы, такие как:

controller.RequestContext.RouteData.Values[Config.RawTokenName] = "12312342123";
controller.Request = new System.Web.HttpRequest("", "http://localhost/example", "token=2342342");
controller.Request.RawUrl = "http://localhost/example?token=234234234234234";

Ни одна из которых не работает по разным причинам. Существует ли «правильный» способ проверки контроллера, который основан на запрашиваемом конкретном URL-адресе?

Я видел некоторые вещи, намекающие на использование Moq, но я не могу присоединиться к точкам ...


Примечание : Пожалуйста, не предлагайте ответы в духе «не делайте аутентификацию подобным образом, вместо этого вы должны {etc etc etc}». Пример намеренно упрощен, чтобы сосредоточиться на главной проблеме, которая заключается в разработке модульных тестов.

1 Ответ

4 голосов
/ 16 марта 2011

Проверьте атрибут самостоятельно - не с контроллером.

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