当前位置:  开发笔记 > 编程语言 > 正文

单元测试XML生成

如何解决《单元测试XML生成》经验,为你挑选了4个好方法。

正在正确生成人们推荐用于测试xml的单元测试策略.

我目前的测试看起来很原始,有点像:

[Test]
public void pseudo_test()
{
   XmlDocument myDOC = new XmlDocument();
   mydoc = _task.MyMethodToMakeXMLDoc();

   Assert.AreEqual(myDoc.OuterXML(),"big string of XML")
}

Robert Rossn.. 21

首先,正如每个人都说的那样,如果为其定义了模式,则验证XML.(如果没有,请定义一个.)

但是,通过对文档执行XPath查询,您可以构建比这更细粒度的测试,例如:

string xml="Your xml string here" ;
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
path = "/doc/element1[@id='key1']/element2[. = 'value2']";
Assert.IsTrue(doc.SelectSingleNode(path) != null);

这使您不仅可以测试文档是否在语义上有效,还可以测试生成它的方法是否使用您期望的值填充它.



1> Robert Rossn..:

首先,正如每个人都说的那样,如果为其定义了模式,则验证XML.(如果没有,请定义一个.)

但是,通过对文档执行XPath查询,您可以构建比这更细粒度的测试,例如:

string xml="Your xml string here" ;
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
path = "/doc/element1[@id='key1']/element2[. = 'value2']";
Assert.IsTrue(doc.SelectSingleNode(path) != null);

这使您不仅可以测试文档是否在语义上有效,还可以测试生成它的方法是否使用您期望的值填充它.



2> Ionuț G. Sta..:

XMLUnit可以帮助您.



3> Holf..:

Fluent Assertions是一个出色的库,用于以流畅,易读的方式表达测试断言.它适用于所有主要的单元测试框架.

它还有一些有用的XML功能(全部来自这里的示例),例如:

xElementA.Should().Be(xElementB);

xDocument.Should().HaveRoot("configuration");
xDocument.Should().HaveElement("settings");

xElement.Should().HaveAttribute("age", "36");
xElement.Should().HaveElement("address");

xAttribute.Should().HaveValue("Amsterdam");

请注意,这适用于LINQ-To-XML而不是原始问题中指定的XmlDocument对象,但是现在我个人发现我使用LINQ-To-XML作为首选.

如果您想要添加更多XML断言以满足您的需求,它也非常容易扩展.



4> Mike K...:

另一种可能是使用XmlReader并检查错误计数> 0.这样的事情:

    void CheckXml()
    {
        string _xmlFile = "this.xml";
        string _xsdFile = "schema.xsd"; 
        StringCollection _xmlErrors = new StringCollection();

        XmlReader reader = null;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler);
        settings.ValidationType = ValidationType.Schema;
        settings.IgnoreComments = chkIgnoreComments.Checked;
        settings.IgnoreProcessingInstructions = chkIgnoreProcessingInstructions.Checked;
        settings.IgnoreWhitespace = chkIgnoreWhiteSpace.Checked;
        settings.Schemas.Add(null, XmlReader.Create(_xsdFile));
        reader = XmlReader.Create(_xmlFile, settings);
        while (reader.Read())
        {
        }
        reader.Close();
        Assert.AreEqual(_xmlErrors.Count,0);
    }    

    void ValidationEventHandler(object sender, ValidationEventArgs args)
    {
        _xmlErrors.Add("<" + args.Severity + "> " + args.Message);
    }

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有