Доступ к настройкам App.Config из библиотеки классов, вызываемой через тестовый проект - PullRequest
6 голосов
/ 23 августа 2009

У меня есть следующие настройки:

  • Проект веб-сайта ASP.net 3.5
  • Библиотека классов C # с бизнес-логикой
  • C # Библиотека классов для модульного тестирования

Библиотека бизнес-логики осуществляет весь доступ к базе данных. Он получает строки подключения из файла web.config веб-сайта, открывая System.Configuration.ConfigurationManager.ConnectionStrings. Когда библиотека вызывается веб-сайтом, это работает нормально, поскольку библиотека ищет конфигурацию вызывающего абонента.

Я хочу иметь возможность проверить свою бизнес-логику через библиотеку классов модульного тестирования. Я поместил файл App.config в корень библиотеки классов тестирования. Из того, что я прочитал, когда библиотека тестирования вызывает процедуры доступа к данным, которые являются частью библиотеки бизнес-логики, необходимо получить доступ к параметрам подключения из файла App.config библиотеки тестирования и использовать их. Однако, когда я пытаюсь запустить свои модульные тесты, я получаю сообщения об ошибках, которые указывают на то, что файл App.config библиотеки тестирования (и / или его содержимое) не был успешно получен.

Мой поиск свойств конфигурации (из библиотеки бизнес-логики) выглядит следующим образом:

public SqlConnection MainConnection {
  get {
    string conn = "";
    try {
      conn = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ConnectionString;
    } catch {
      // might be calling from test project. Need to reference app settings
      conn = System.Configuration.ConfigurationManager.AppSettings["connString"];
    }
    return new SqlConnection(conn);
  }
}

Когда это вызывается из проекта веб-сайта, оно работает. Из модульного теста переменная conn никогда не устанавливается на что-либо (я также пробовал System.Configuration.ConfigurationSettings.AppSettings и использую вместо того же результата) Что мне нужно сделать, чтобы библиотека классов бизнес-логики успешно извлекала настройки библиотек классов модульного теста при вызове из графического интерфейса NUnit?

Ответы [ 4 ]

7 голосов
/ 23 августа 2009

Я только что нашел решение здесь . App.config теперь правильно используется при запуске моих тестов через графический интерфейс NUnit.

Очевидно, что если вы используете графический интерфейс NUnit и добавляете сборку, выполнив «Проект»> «Добавить сборку», он не получает доступ к app.config. Однако, если вы добавите сборку в проект NUnit, перетащив dll из Windows Explorer в графический интерфейс NUnit, он получит доступ к app.config.

В качестве альтернативы, вы можете добавить сборку через графический интерфейс, а затем перейти в NUnit GUI> Project> Edit и установить имя файла конфигурации в качестве имени файла конфигурации (VS установит для этого name.of.your. dll.config) и задайте для Project Base каталог \ bin \ Debug вашего проекта (это дополнительные шаги, которые выполняются в фоновом режиме при перетаскивании сборки против ее добавления вручную.

6 голосов
/ 23 августа 2009

Я бы порекомендовал изменить дизайн так, чтобы ваш уровень бизнес-логики вместо того, чтобы отвечать за поиск настроек конфигурации, вводил вместе с ними.

Ваше веб-приложение может вводить параметры, которые оно считывает из своего файла Web.config, в то время как ваш модульный тест может вводить другие параметры (например, строку подключения к тестовой базе данных и т. Д.)

3 голосов
/ 07 января 2010

Просто переименуйте app.config в name.of.your.dll.config. У меня это работает.

0 голосов
/ 23 августа 2009

Попробуйте метод WebConfigurationManager.OpenWebConfiguration ()

Configuration config = WebConfigurationManager.OpenWebConfiguration(@"x:\path\web.config");
            KeyValueConfigurationCollection appSettings = config.AppSettings.Settings;
            string connString = appSettings["connString"].Value;
...