У меня есть несколько тестов NUnit, и я бы хотел, чтобы каждый тест использовал конкретный файл app.config. Есть ли способ reset конфигурации для нового файла конфигурации перед каждым тестом?
Перезагрузить app.config с nunit
Ответ 1
Try:
/* Usage
* using(AppConfig.Change("my.config")) {
* // do something...
* }
*/
public abstract class AppConfig : IDisposable
{
public static AppConfig Change(string path)
{
return new ChangeAppConfig(path);
}
public abstract void Dispose();
private class ChangeAppConfig : AppConfig
{
private bool disposedValue = false;
private string oldConfig = Conversions.ToString(AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE"));
public ChangeAppConfig(string path)
{
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0);
}
public override void Dispose()
{
if (!this.disposedValue)
{
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", this.oldConfig);
typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0);
this.disposedValue = true;
}
GC.SuppressFinalize(this);
}
}
}
Ответ 2
Если вы сообщаете, что для разных наборов тестовых примеров необходимо иметь разные конфигурации, вы можете иметь разные тестовые проекты с конфигурационным файлом для каждого. Затем запускайте свои тестовые проекты по очереди.
Ответ 3
I ответил на аналогичный вопрос для Powershell. Тот же метод должен работать здесь, просто вызовите следующее в начале теста:
System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath)
EDIT: на самом деле выглядит так, что это сложнее в скомпилированном exe - вам нужно сделать что-то вроде этого, чтобы получить конфигурацию перезагружается.