Тестирование: я * хочу * протестировать web.config - PullRequest
9 голосов
/ 05 марта 2010

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

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

Однако, web.config в моем проекте должен всегда содержать определенные значения, и я хочу провести модульный тест, который не пройдёт, если для них заданы недопустимые значения. Например, одним из значений является строка подключения SQL.

Я хочу написать тест, который будет читать строку подключения из web.config. Я предполагаю, что тест может подключиться к серверу с помощью строки подключения и, возможно, выполнить очень простую команду, такую ​​как SELECT system_user;. Если команда выполняется успешно и возвращает что-то, тест проходит успешно. Иначе не получится. Я хочу, чтобы строка подключения была прочитана из web.config в тестируемом проекте.

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

Как заставить мой тестовый проект читать web.config из другого проекта?

Ответы [ 7 ]

4 голосов
/ 05 марта 2010

Похоже, вы пытаетесь проверить настройки в web.config , который относится к уровню развертывания и отличается от модульного тестирования.

Модульное тестирование говорит вам, что ваша основная логика работает должным образом; подтверждение развертывания сообщает, что приложение было правильно установлено и настроено и безопасно для использования. Модульные тесты важны для разработчиков, проверка развертывания имеет смысл для конечного пользователя или администратора, который развертывает приложение.

В такой ситуации мне нравится встраивать «системную консоль» в мои приложения. Эта консоль содержит ряд самодиагностических проверок, таких как:

  1. Проверка правильности конфигурации строки (ий) соединения
  2. Обеспечение доступности и функционирования любых сторонних сервисов
  3. Гарантия того, что все параметры конфигурации действительны и не вызовут ошибок времени выполнения (например, существуют пути, учетная запись веб-пользователя имеет доступ для чтения / записи, где это необходимо и т. Д.)

Я настоятельно рекомендую вам рассмотреть возможность отделить этот вид проверки конфигурации и развертывания от вашего набора модульных тестов. Это не только упростит вашу работу (поскольку у вас не будет для загрузки файла конфигурации из другого проекта), но также станет инструментом, который действительно очень нравится покупателям:)

3 голосов
/ 05 марта 2010

Вы можете загрузить и изучить другие файлы конфигурации с помощью методов ConfigurationManager.OpenXXX () .

Класс WebConfigurationManager специально имеет метод для открытия файлов web.config, а на странице документации, на которую я ссылаюсь, есть еще несколько примеров кода. После того, как вы загрузили свой объект конфигурации, вы можете исследовать его для разделов и ключей.

var cfm = new ConfigurationFileMap("path/to/web.config");
var config = WebConfigurationManager.OpenMappedWebConfiguration(cfm);
1 голос
/ 07 мая 2014

Существует коммерческий инструмент под названием CheckMyConfig для проверки .NET файлов конфигурации, который идентифицирует настройки в данном файле конфигурации и пытается их проверить.

Возможные типы настроек включают строки подключения к базе данных, файлы, папки, IP-адреса, имена хостов и URL-адреса.

Инструмент позволяет выполнять ряд проверок, включая открытие соединений с базой данных, доступ к папкам, запрос определенного URL-адреса и т. Д.

Существует отдельная версия, но инструмент также имеет интеграцию с Visual Studio и простой API, который можно использовать для встраивания инструмента в ваши собственные приложения, чтобы выполнить настройку 'sanity check' во время запуска приложения.

1 голос
/ 04 января 2012

Если вы хотите использовать оригинальный файл web.config со своего веб-сайта в своем проекте модульного тестирования, не копируя его, тогда вы можете Изменить VS Local-Test-Settings .

Ниже приведена пошаговая процедура использования файла конфигурации веб-сайта ASP.net в рамках проекта Unit Testing. Перейдите по ссылке http://forums.asp.net/t/1454799.aspx/1

1 голос
/ 05 марта 2010

Звучит так, будто ты пытаешься раздавить комара кувалдой.Почему бы не сделать это вручную, как часть контрольного списка развертывания;У меня есть задача вручную подтвердить connectionString.

Или, если вы хотите автоматизировать ее, напишите программу для проверки connectionString, подключите ее к серверу непрерывной интеграции (если он у вас есть) и завершите сборку, еслиАргумент connectionString неверен.

Используйте модульные тесты для целей, предназначенных для тестирования кода, а не для конфигурации.

1 голос
/ 05 марта 2010

Я задал похожий вопрос, который вы, возможно, захотите проверить:

Как проверить, что все мои ожидаемые настройки web.config определены?

Я закончил тем, что все заработало, но досадная часть - это мой источник контроля, постоянно блокирующий скопированный файл конфигурации. Вы также можете переименовать файл web.config в app.config, чтобы он компилировался в не веб-проект.

0 голосов
/ 05 марта 2010

В своем проекте модульного тестирования добавьте файл app.config и добавьте параметры из файла web.config, которые вы хотели бы использовать для своих тестов.

...