У меня есть библиотека, для которой я пишу модульные тесты. Библиотека используется двумя приложениями: одна - служба Windows, другая - приложение из командной строки, которое выполняет некоторые операции чтения и записи реестра. Каждый из них имеет немного другой файл App.config, загружаемый из библиотеки при запуске. Например:
public RetentionService()
{
SettingHive = new Hive();
TimingService = new RetentionTimingService(SettingHive);
AppSettingsReader asr = new AppSettingsReader();
object appsListObj = asr.GetValue(@"blocking-process-list", Type.GetType(@"System.String"));
string appsList = appsListObj.ToString();
_BlockingAppNames = RetentionService.ListFromList(appsList);
string targetList = asr.GetValue(@"target-files", Type.GetType(@"System.String")).ToString();
_TargetLogs = RetentionService.ListFromList(targetList);
}
Когда я пытаюсь использовать эту библиотеку из unit test, она не загружается, потому что приложение, загружающее библиотеку (предположительно nunit), не имеет файла *.exe.config с соответствующими ключами.
Какой лучший способ сделать это? Я хочу, чтобы библиотека загружала настройки из каждого приложения *.exe.config в процессе производства, но из третьего места, если выполняется unit test.
Если ваши модульные тесты предназначены для тестирования кода, то вообще не зависеть от файла конфигурации. Извлеките свою зависимость из своих классов и используйте инъекцию зависимостей для ввода данных. Таким образом, вы можете заглушить свой класс конфигурации.
Если вы на самом деле просто проверяете свой файл конфигурации, вы можете явно загрузить его с помощью ConfigurationManager, хотя я бы не хотел, t предлагайте данные конфигурации тестирования модулей. Это лучший кандидат на тестирование дыма.
В качестве альтернативы просто добавьте файл app.config в проект тестирования устройства, содержащий соответствующую информацию.
Лучше всего заключить доступ к данным конфигурации в прокси-классе, который можно перенаправить по мере необходимости во время выполнения - не используйте встроенные API напрямую.