2009-11-19 2 views
1

저는 약간의 딜레마를 겪고 있습니다. 특정 XPath 쿼리 결과를 반환하는 함수가있는 매우 기본적인 클래스가 있습니다.단위 테스트 기능 XPath 쿼리 결과?

다음은 현재 사용중인 코드입니다.

[TestFixture] 
public class MarketAtAGlance_Test 
{ 
    private XmlDocument document; 
    private MarketAtAGlance marketAtAGlance; 

    [SetUp] 
    public void setUp() 
    { 
     this.document = new XmlDocument(); 
     // load document from file located in the project 
     this.marketAtAGlance = new MarketAtAGlance(document); 
    } 

    [Test] 
    public void getHourlyImport_Test() 
    { 
     Assert.AreEqual(100.0d, marketAtAGlance.getHourlyImport()); 
    } 

    [Test] 
    public void getHourlyExport_Test() 
    { 
     Assert.AreEqual(1526.0d, marketAtAGlance.getHourlyExport()); 
    } 
} 

public class MarketAtAGlance 
{ 
    XmlDocument document; 

    public MarketAtAGlance(XmlDocument document) 
    { 
     this.document = document; 
    } 

    public double getHourlyImport() { 
     double value = Convert.ToDouble(document.SelectSingleNode("//information[@id=\"dat11\"]/new_val").InnerText); 

     return value; 
    } 

    public double getHourlyExport() { 
     double value = Convert.ToDouble(document.SelectSingleNode("//information[@id=\"dat12\"]/new_val").InnerText); 

     return value; 
    } 
} 

이것은 처음으로 단위 테스트를 사용하기 때문에 아직 많은 사소한 일들이 확실하지 않습니다. 보시다시피, 내 하드 드라이브에있는 정적 XML 파일을로드하고 있습니다. 여분의 종속성을 가져야하거나 XML 텍스트를 큰 문자열에 넣어야합니까? 이미 알려진 값으로 테스트 할 수 있기 때문에 동일한 형식의 이전 XML 파일을로드하고 있습니다. 또한

은 어떻게 문서로 XML URL과 부하를 취하는 (클래스 XmlHttpReader을 테스트 장치에 대한 갈 것이라고? 디자인에 대한 내 질문이나 의견에

모든 의견을?

+0

테스트 데이터의 설정을 가능한 한 간단하게 유지하는 것이 도움이된다는 것을 알고 있습니다. 이렇게하면 테스트에서 얻으려고하는 것이 정확히 나타납니다. – Mark

답변

1

I 테스트 설정에서 XML을 구성,하지만 당신은 통과 시험에 필요한 것만으로 XML을 제한하는 것입니다. 당신의 XML 문서는이 경우 매우 간단 할 수있는 것 같습니다.

<someRoot> 
    <someNode> 
     <information id='dat11'><new_val>100.0</new_val></information> 
     <information id='dat12'><new_val>1526.0</new_val></information> 
    </someNode> 
</someRoot> 

하는 XML 통과 것이다 당신의 테스트.

또한 시스템 클래스 인 경우 XmlHttpReader를 테스트하지 않습니다. 당신은 그것에 의존 할 수 있습니다. 클래스의 종속성으로 쉽게 분리 할 수 ​​있도록 무언가로 포장해야 할 수도 있습니다.

1

큰 XML 문자열이 있어야하는지 아니면 파일에서로드해야하는지에 대한 첫 번째 질문입니다. 나는 어느 쪽이라도 일할 것이다라고 말할 것이다. 솔직히 말해서 프로젝트 내부의 파일에서로드하고 있기 때문에 임베디드 리소스로 프로젝트에 보관하고 리플렉션을 통해로드합니다. 그것은 당신의 동료 중 누구라도 자신의 PC에서 파일 구조를 실행하면 파일 구조의 혼란을 피할 수 있습니다. Unit Tests에서 실제로 만난 유일한 우수 사례는 올바르게 테스트하고 다른 사람들이 테스트를 쉽게 실행할 수 있는지 확인하는 것입니다.

두 번째 질문은 XmlHttpReader입니다. 그것은 당신의 결과에 달려 있습니다. 당신이 유효한 XML을 가지고 있는지 테스트 할 수 있다면 그것을 찾으십시오. 나는 부정적인 테스트를 또한 추천 할 것이다. http://stackoverflow.com으로 지정하거나 알고있는 URL에서 오류가 발생하고 적절한 예상 오류가있는 테스트를 꾸미십시오.