如何测试XELement及其子元素?

时间:2012-08-23 20:30:59

标签: fluent-assertions

我有一个示例Xml代码段

<modification name="givenName" operation="add" xmlns="urn:oasis:names:tc:DSML:2:0:core">
    <value>Changed name</value>
</modification> 

xml加载到我的XElement,我用

        XElement xml = ...to load xml above...;
        xml.Should().HaveAttribute("name", "givenName")
            .And.HaveAttribute("operation", "add")
            .And.HaveAttribute("xmlns", "urn:oasis:names:tc:DSML:2:0:core")
            .And.HaveElement("value");

测试我的代码,属性测试全部通过,但元素测试(最后一个条件)失败。

任何人都可以指出我的代码有什么问题吗?

我怎样才能测试Xml有一个名为“value”的元素,它的值是“Changed name”?

提前致谢!

2 个答案:

答案 0 :(得分:2)

我怀疑问题是该元素的XName不仅仅是value - 它的value 带有命名空间 。据推测,HaveElement是名称空间感知的。试试这个:

XElement xml = ...to load xml above...;
XNamespace ns = "urn:oasis:names:tc:DSML:2:0:core";
xml.Should().HaveAttribute("name", "givenName")
    .And.HaveAttribute("operation", "add")
    .And.HaveAttribute("xmlns", "urn:oasis:names:tc:DSML:2:0:core")
    .And.HaveElement(ns + "value");

最后一行检查它是否具有名称空间限定的元素。

答案 1 :(得分:2)

它将成为Fluent Assertions 2.1的一部分。如果您迫不及待,可以通过Git存储库获取它