2009-11-19 80 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文件(使用相同的格式),因为我可以使用已知的值进行测试。

另外,我怎么会去单元测试的XmlHttpReader(类,它在XML URL和负载它作为一个文件?

我对设计问题或意见有何评论?

+0

我觉得保持测试数据的设置尽可能简单很有帮助。这有助于揭示测试试图完成的内容。 – Mark 2009-11-19 20:25:59

回答

1

我将构建测试设置中的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字符串还是从文件中加载它。我会说要么工作。说实话,虽然自从你从项目中的一个文件加载,我会把它作为一个嵌入式资源保存在项目中,并通过反射来加载它。如果你的任何同事从他们的电脑上运行它,那将会把图片结构混乱在图片之外。我真正遇到的单元测试的唯一最佳做法是确保您正确测试并确保其他人可以轻松地运行测试。

对于第二个问题,关于XmlHttpReader。这将取决于你的输出。如果你可以测试你有有效的XML,那就去做吧。我也会推荐负面测试。将它指向http://stackoverflow.com,或者您知道的URL将会出错,并用适当的预期错误来修饰测试。