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

Не удается прочитать настройки приложения при модульном тестировании

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

string host = ConfigurationManager.AppSettings["Host"]  

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

ваш класс для проверки примет класс IConfiguration в качестве параметра (обычно для вашего конструктора) следующим образом:

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

    public void MyMethodToTest()
    {
    }
}

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

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

И ваша фактическая реализация создаст ваш класс конфигурации, загрузит его со значениями из настроек приложения и передаст это в вашу реализацию