Метод модульного тестирования с HttpContext - PullRequest
0 голосов
/ 13 июля 2011
    public SupportedBrowser GetBrowser()
    {
        string agent = HttpContext.Current.Request.Headers["User-Agent"];

        if (agent.Contains("iPad"))
        {
            return new iPad();
        }
        else
            return new InternetExplorer7();
    }

Я настраиваю модульное тестирование по вышеуказанному методу, используя инструмент модульного тестирования Microsoft (MS-Test?).Поскольку юнит-тест не является веб-сайтом, HttpContext отсутствует.Я могу придумать два решения:

A.Добавьте необязательный параметр: GetBrowser(bool debug = false).Это позволяет текущему коду выполняться без рефакторинга.Затем измените метод, чтобы создать фиктивный контекст или жестко запрограммированный пользовательский агент, когда отладка истинна.

B.Добавьте Dependency инъекцию.Получить контекст откуда-то еще.Тем не менее, я думаю, что мне нужно добавить IoC через ninject, чтобы автоматизировать это.Это большая работа.

Можете ли вы придумать что-нибудь лучше или улучшить эти идеи?

Обратите внимание, этот метод размещен в библиотеке классов.Я хочу, чтобы это продолжалось.

1 Ответ

2 голосов
/ 13 июля 2011

Строка агента - естественное место для насмешек. Вместо того, чтобы получать строку агента из контекста запроса внутри этого метода, передайте ее или внедрите в метод / класс. Таким образом, вы получаете контроль над ним во время тестирования и выполнения.

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