【问题标题】:How to test XELement and its child elements?如何测试 XELement 及其子元素?
【发布时间】:2012-08-19 10:25:09
【问题描述】:

我有一个示例 Xml 代码 sn-p

<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”?

提前致谢!

【问题讨论】:

    标签: fluent-assertions


    【解决方案1】:

    我怀疑问题在于元素的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");
    

    最后一行检查是否有 namespace-qualified 元素。

    【讨论】:

    • 很好,我必须包含命名空间。但是我必须稍微更改代码And.HaveElement((ns + "value").ToString()) 否则它不会编译。
    • 任何线索如何测试 元素的值是“更改名称”?
    • @hardywang:呃——它不需要 XName 吗?作为一个 API 太糟糕了 :(
    • 我们会在下一个版本的 Fluent Assertions 中看到它。
    • 两者。但我们正在最终确定一个带有 Beta 版的大版本,因此我们必须将其冻结几周。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多