Как можно генерировать представления в модульных тестах asp.net-mvc? - PullRequest
6 голосов
/ 27 ноября 2008

Я пытаюсь создать представления в модульных тестах, но не могу обойти отсутствующий VirtualPathProvider. Большинство viewengines используют базовый класс VirtualPathProviderViewEngine, который получает провайдера из текущей среды HostingEnvironment.

protected VirtualPathProvider VirtualPathProvider {
    get {
        if (_vpp == null) {
            _vpp = HostingEnvironment.VirtualPathProvider;
        }
        return _vpp;
    }
    set {
        _vpp = value;
    }
}

В модульных тестах HostingEnvironment отсутствует, даже если я его создаю, в настоящий момент VirtualPathProvider отсутствует.

Как я могу обойти эту проблему? Нужно ли создавать собственный FakeWebFormViewEngine?

Ответы [ 4 ]

2 голосов
/ 20 февраля 2009

В VS Team System 2010 предусмотрены функции для приемочного тестирования, которые подходят для того, что вы пытаетесь сделать. Как упомянул Грегори, тесты модуля Beamer для MVC выполняются для контроллера. Вы также можете протестировать модель в зависимости от того, как вы реализуете свою модель.

Здесь много противоречий. Некоторые люди смотрят на модель как на бизнес-объекты, где я смотрю на них как на представления модели, специфичной для представления. Больше модели представления. Поскольку в моей модели нет реальной функциональности, мне не нужно ее тестировать. Я тестирую свой DAL, уровень бизнес-логики вне MVC. MVC действительно является частью уровня представления. Это разделение вашей презентации, а не приложения. Вы все еще накладываете свое заявление.

Что касается модульного тестирования, то контроллер находится там, где вы тестируете. Вы можете проверить свою модель, если есть методы, которые требуют тестирования. Что касается представлений, то они проходят приемочные испытания пользователями или с помощью автоматизации, такой как Watin.

0 голосов
/ 20 февраля 2012

Вы можете попробовать Ivonna для интеграции (и, в некоторой степени, единичного) тестирования ваших просмотров.

0 голосов
/ 20 февраля 2009

Простите, если это звучит невежественно, но какова цель генерирования представлений? Возможно, я что-то упускаю, но основной фокус модульных тестов - «тестирование модуля». В правильно настроенном приложении ASP.NET MVC код, который необходимо протестировать, находится в контроллере и ниже. На самом деле, я бы сказал, что при правильном развитии он ниже.

Тест представления - это пользовательский приемочный тест. Я не вижу ничего плохого в том, чтобы автоматизировать это каким-либо образом, но я не уверен, что это нужно делать с помощью модульного теста.

Я что-то упустил?

0 голосов
/ 29 ноября 2008

Я тоже пытался это сделать. К сожалению, проблема заключается не только в VirtualPathProvider (VPP). VPP используется для сопоставления представления или частичного представления с физическим путем для определения наличия файла. К сожалению, ViewContext заканчивается виртуальным путем, а не физическим путем, поэтому при визуализации представления Builder использует свойства HostingEvnironment, которых нет.

Если вы используете версию Visual Studio с Testing, то вы можете использовать Web Unit Test. Это позволит вам использовать браузер для вызова URL-адреса, а затем проанализировать ответ для проверки значений.

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