Более элегантным решением является использование простого старого внедрения зависимости в сами параметры конфигурации. ИМХО, это чище, чем издеваться над классом / оболочкой для чтения конфигурации и т. Д.
Например, скажем, для работы класса «Погода» требуется «ServiceUrl» (например, он вызывает веб-службу для получения погоды). Вместо того, чтобы иметь какую-то строку кода, которая активно идет в файл конфигурации, чтобы получить этот параметр (будь то код в классе Weather или в отдельном считывателе конфигурации, который можно смоделировать согласно некоторым другим ответам), класс Weather может параметр, который нужно ввести, либо через параметр в конструктор, либо, возможно, через установщик свойств. Таким образом, юнит-тесты чрезвычайно просты и прямолинейны и даже не требуют насмешек.
Значение параметра затем может быть введено с использованием контейнера Inversion of Control (или Dependency Injection), поэтому пользователям класса Weather не нужно явно указывать значение откуда-либо, как оно обрабатывается контейнером.