Перезагрузите app.config с помощью nunit

У меня есть несколько тестов NUnit, и я хотел бы, чтобы каждый тест использовал определенный файл app.config. Есть ли способ сбросить конфигурацию до нового файла конфигурации перед каждым тестом?


person Karsten    schedule 04.06.2009    source источник


Ответы (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
comment
Кажется, это работает идеально. Не могли бы вы объяснить, что он на самом деле делает? :-) - person Karsten; 09.06.2009
comment
У меня это не сработало (с использованием .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