2013-06-06 4 views
15

У меня есть консольное приложение C#. Одна из его функций считывает значение appconfig и делает некоторую работу.не удалось прочитать настройки приложения при модульном тестировании

string host = ConfigurationManager.AppSettings["Host"] 

Так что я написал NUNIT тест для моего консольного приложения. Проект модульного тестирования был создан с использованием библиотеки классов.

Но мой модульный тест не работает. Потому что он не читает настройки моего приложения (не указывает никаких настроек приложения). Что является причиной этого.
Когда я запускаю консольное приложение, оно правильно считывает настройки приложения.

ответ

29

У вас должен быть app.config, созданный для вашего проекта модульного тестирования. При выполнении модульных тестов приложение app.config вашего консольного приложения не будет обсуждаться.

+3

Это означает, что я должен добавить следующее мой тестовый проект, а также. ' ' –

+0

Да, вы правы – aquaraga

+0

Сработало. Никогда не знал этого. Спасибо за помощь –

11

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

Таким образом, вы могли бы иметь свой интерфейс конфигурации как:

public interface IConfiguration 
{ 
    public string Host { get; set; } 
} 

ваш класс, чтобы проверить бы принять класс IConfiguration в качестве параметра (обычно в конструкторе), как это:

public class MyClass 
{ 
    IConfiguration _config; 
    public MyClass(IConfiguration config) 
    { 
     _config = config; 
    } 

    public void MyMethodToTest() 
    { 
    } 
} 

Тогда ваш тест может использовать интерфейс для передачи в конфигурации, а не в зависимости от внешнего файла конфигурации, который может потенциально изменить и повлиять на ваш модульный тест:

[Test] 
public void Testing_MyMethodToTest() 
{ 
    // arrange 
    var config = new Configuration { Host = "My Test Host" }; 
    // act 
    new MyClass(config).MyMethodToTest(); 
    // Add assertion for unit test 
} 

И фактическая реализация будет создать свой класс конфигурации, загрузите его со значением (ов) из AppSettings и передать, что в вашей реализации

+0

Но его выполнение по-прежнему нужно будет загружать в его настройках из настроек приложения в тестовом проекте. –

+0

Добавлен пример того, как вы будете писать тест, который не требует настроек приложения – boniestlawyer

Смежные вопросы