5 .net c# xml xsd unit-testing
我有一些WCF方法用于将信息从服务器应用程序传输到网站前端以用于绑定.我将结果作为XElement发送,XElement是包含我想要绑定的数据的XML树的根.
我想创建一些检查数据并确保它按预期发生的测试.
我目前的想法是:每个返回XElement树的方法都有一个相应的模式(.XSD)文件.此文件包含在包含我的WCF类作为嵌入式资源的程序集中.
测试在这些方法上调用方法,并将结果与这些嵌入式模式进行比较.
这是一个好主意吗?如果没有,我可以使用哪些其他方法来"保证"方法将返回什么样的XML?
如果是,您如何针对架构验证XElement?我如何从嵌入的程序集中获取该模式?
use*_*264 11
我想说用xsd架构验证xml是个好主意.
如何使用加载的模式验证XElement:正如您在此示例中所看到的,您需要首先验证XDocument以填充"模式后验证信息集"(可能有一个解决方案可以在不使用Validate方法的情况下执行此操作XDOcument但我还没找到一个):
String xsd =
@"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<xsd:element name='root'>
<xsd:complexType>
<xsd:sequence>
<xsd:element name='child1' minOccurs='1' maxOccurs='1'>
<xsd:complexType>
<xsd:sequence>
<xsd:element name='grandchild1' minOccurs='1' maxOccurs='1'/>
<xsd:element name='grandchild2' minOccurs='1' maxOccurs='2'/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>";
String xml = @"<?xml version='1.0'?>
<root>
<child1>
<grandchild1>alpha</grandchild1>
<grandchild2>beta</grandchild2>
</child1>
</root>";
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsd)));
XDocument doc = XDocument.Load(XmlReader.Create(new StringReader(xml)));
Boolean errors = false;
doc.Validate(schemas, (sender, e) =>
{
Console.WriteLine(e.Message);
errors = true;
}, true);
errors = false;
XElement child = doc.Element("root").Element("child1");
child.Validate(child.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>
{
Console.WriteLine(e.Message);
errors = true;
});
Run Code Online (Sandbox Code Playgroud)
如何从程序集中读取嵌入式架构并将其添加到XmlSchemaSet:
Assembly assembly = Assembly.GetExecutingAssembly();
// you can use reflector to get the full namespace of your embedded resource here
Stream stream = assembly.GetManifestResourceStream("AssemblyRootNamespace.Resources.XMLSchema.xsd");
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, XmlReader.Create(stream));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8009 次 |
| 最近记录: |