Как мне протестировать веб-приложение MVC в контейнере с nunit? - PullRequest
2 голосов
/ 16 сентября 2010

У нас есть веб-сайт MVC, который работает в Autofac. Вся конфигурация хранится в разделе конфигурации autofac в web.config, и при запуске Global asax устанавливает контейнер и сортирует все модули, предоставляя им свои настройки конфигурации - тот, который меня интересует в данный момент, модуль NHibernate - поэтому он получает строку подключения, установленную в его конструкторе.

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

Должен ли я добавить дополнительный проект в решение со всеми моими тестами, и если я сделаю это, мне нужно будет реплицировать строку подключения к базе данных в конфигурации autofac для этого тестового проекта и построить тестовый контейнер в этом проекте, который будет проверить мой доступ к данным? Или я должен пытаться заполучить контейнер веб-приложения для проведения тестирования - я полагаю, нет, так как Application_start Global.asax не будет работать, если не будет достигнут HTTP GET. Я действительно не хочу копировать все настройки и создание контейнеров веб-приложения, но в данный момент я думаю, что мне придется ...?

1 Ответ

2 голосов
/ 12 ноября 2010

Жаль видеть медленный ответ на это. Написание интеграционных тестов для фактического DAL не так уж и часто - достаточно много модульных тестов времени с использованием заглушенного DAL - так что, вероятно, такого сценария не так много.

Если вы поместите всю свою конфигурацию в модули Autofac, ваш контент Global.asax может быть таким же простым, как вызов builder.RegisterModule(new ConfigurationSettingsReader()) - тот же самый файл конфигурации может быть загружен из ваших интеграционных тестов с использованием перегрузки ConfigurationSettingsReader(), которая занимает имя файла.

Вместо того, чтобы иметь отдельный модуль для тестируемого NHibernate, рассмотрите возможность использования InstancePerLifetimeScope() вместо HttpRequestScoped()/InstancePerHttpRequest(). Это имеет тот же эффект (если вы не возились с жизненной иерархией :)) и будет работать как в веб-, так и в не-веб-сценариях.

Надеюсь, это поможет! Ник

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