Я много искал и до сих пор не нашел надежного решения для этого. Предположим, что у вас есть методы в вашем приложении. Эти методы используют «System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration» для доступа к некоторым параметрам в web.config. Если вы попытаетесь протестировать эти методы, ваши тесты потерпят неудачу, потому что ваш тестовый проект не имеет web.config.Методы тестирования со ссылкой на Web.Config в .Net C#
Каков наилучший способ решить эту проблему. Для проектов с простым конфигурационным файлом я обычно использую такой метод, как метод фасада.
public class Config
{
public static String getKeyValue(String keyName)
{
if (keyName == String.Empty) return String.Empty;
String result = "";
System.Configuration.Configuration rootWebConfig1 =
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (rootWebConfig1.AppSettings.Settings.Count > 0)
{
System.Configuration.KeyValueConfigurationElement reportEngineKey =
rootWebConfig1.AppSettings.Settings[keyName];
if (reportEngineKey != null)
{
result = reportEngineKey.Value;
}
}
return result;
}
}
Каждый раз, когда я пытался установить путь для OpenWebConfiguration(), я получил ошибку «Относительный виртуальный путь не позволил»
Также обратите внимание, что это только один из способов сделать это проверяемым. Это далеко не единственный путь. Существуют также издевательские структуры, которые могут издеваться над методами 'static', и вы можете использовать один из них, чтобы издеваться над существующим методом' Config.getKeyValue() ', причем практически никаких изменений кода не происходит. – CodingWithSpike
Я бы добавил, что ответ ниже на kprobst идет рука об руку с этим ответом. Создайте интерфейс, затем используйте библиотеку Moq (или другую фальшивую фреймворк) для создания макетного объекта, который 'ConfigMock' служит в этом ответе. –
Спасибо! Это, кажется, чистый и многоразовый подход. – Reza