임의의 XML을 기반으로 System.Configuration.Configuration 인스턴스를 얻는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/20952

문제

제가 작성한 사용자 정의 ConfigurationSection을 단위 테스트하려고 합니다. 임의의 구성 XML을 시스템.구성.구성 Tests.dll.config 파일에 테스트 구성 xml을 넣지 않고 각 테스트에 대해즉, 저는 다음과 같은 작업을 하고 싶습니다.

Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);

그러나 그것은 다음과 같습니다 구성 관리자 EXE 파일이나 시스템 구성과 관련된 구성 인스턴스만 제공합니다.임의의 XML을 구성 인스턴스에 로드하는 방법이 있습니까?

도움이 되었습니까?

해결책

실제로 제가 발견한 방법이 있습니다....

다음과 같이 원래 구성 섹션에서 상속되는 새 클래스를 정의해야 합니다.

public class MyXmlCustomConfigSection : MyCustomConfigSection
{
    public MyXmlCustomConfigSection (string configXml)
    {
        XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
        DeserializeSection(reader);
    }
}


그런 다음 다음과 같이 ConfigurationSection 개체를 인스턴스화할 수 있습니다.

string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);

누군가에게 도움이 되길 바랍니다 :-)

다른 팁

당신이 찾고있는 것은 ConfigurationManager라고 생각합니다.OpenMappedExe구성

이를 통해 파일 경로로 지정한 구성 파일을 열 수 있습니다( Exe구성파일맵)

다른 포스터의 내용이 사실이고 테스트용으로 완전히 새로운 XML 파일을 생성하고 싶지 않다면 구성 편집 내용을 테스트 메서드 자체에 넣은 다음 새로 변경된 구성에 대해 테스트를 실행하는 것이 좋습니다. 데이터.

학급 멤버들을 보면 아마도 대답은 '아니오'일 것 같습니다*.어쨌든 자신만의 XML 구성 파일을 만드는 대신 이 작업을 수행하려는 이유가 무엇인지 잘 모르겠습니다.

*그렇지 않습니다. 지저분한 반사 해킹은 제외됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top