Ответ 1
У вас должен быть app.config, созданный для вашего проекта unit test. При выполнении модульных тестов приложение app.config вашего консольного приложения не будет обсуждаться.
У меня есть консольное приложение на С#. Одна из его функций считывает значение appconfig
и выполняет некоторую работу.
string host = ConfigurationManager.AppSettings["Host"]
Итак, я написал тест NUNIT
для моего консольного приложения. Проект модульного тестирования был создан с использованием библиотеки классов.
Но мой unit test не работает. Потому что он не читает настройки моего приложения (не указывает никаких настроек приложения). В чем причина этого. Когда я запускаю консольное приложение, он правильно читает настройки приложения.
У вас должен быть app.config, созданный для вашего проекта unit test. При выполнении модульных тестов приложение app.config вашего консольного приложения не будет обсуждаться.
Пока вы можете определить настройки приложения в другом файле конфигурации для вашего проекта 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
}
И ваша фактическая реализация создаст ваш класс конфигурации, загрузит его со значениями из настроек приложения и передаст это в вашу реализацию