У меня есть несколько тестов NUnit, и я хотел бы, чтобы каждый тест использовал определенный файл app.config. Есть ли способ сбросить конфигурацию до нового файла конфигурации перед каждым тестом?
Перезагрузите app.config с помощью nunit
Ответы (3)
Пытаться:
/* 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);
}
}
}
person
Community
schedule
05.06.2009
Кажется, это работает идеально. Не могли бы вы объяснить, что он на самом деле делает? :-)
- person Karsten; 09.06.2009
У меня это не сработало (с использованием .NET 4.0). Мне пришлось расширить его, пожалуйста, посмотрите мой ответ здесь: stackoverflow.com/questions/6150644/
- person Daniel Hilgarth; 27.05.2011
Если проблема заключается в том, что для разных наборов тестовых случаев необходимо иметь разные конфигурации, у вас могут быть разные тестовые проекты с файлом конфигурации для каждого. Затем запускайте тестовые проекты по одному.
person
Rune FS
schedule
04.06.2009
Я ответил на аналогичный вопрос для Powershell. Тот же метод должен работать и здесь, просто вызовите следующее в начале вашего теста:
System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath)
РЕДАКТИРОВАТЬ: На самом деле похоже, что это сложнее в скомпилированном exe - вам нужно сделать что-то вроде это, чтобы перезагрузить конфигурацию.
person
Chris Ballard
schedule
04.06.2009