代码之家  ›  专栏  ›  技术社区  ›  sal

JUnit测试XML文档是否按任意列排序

  •  3
  • sal  · 技术社区  · 15 年前

    给一个XML文档

    <root>
      <row>
        <a>2</a>
        <b>1</b>
        <c>8</c>
      </row>
      <row>
        <b>5</b>
        <a>2</a>
        <c>8</c>
      </row>
      <row>
        <a>2</a>
        <c>8</c>
        <b>6</b>
      </row>
    </root>
    

    有没有一种简单的方法可以断言XML文档是按照xmlUnit中的元素b排序的?

    编辑: 我对一个软件有一个奇怪的问题,我不能改变任何给定节点中XML标记的值需要按特定顺序排列的位置。我希望我的测试工具在任何其他验证之前执行这组规则。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Dimitre Novatchev    15 年前

    使用以下简单的xpath 1.0表达式的值 :

    not(//b[. > following::b])

        2
  •  1
  •   Anon    15 年前

    可以围绕XPath选择构建断言。

    最简单的方法可能是使用xpath表达式 /root/row/b 请求 NODESET 结果类型,然后将文本从每个结果节点复制到 List 结构。可以断言该列表中的文本等于使用 Arrays.asList() 方法(我假设你使用Java)。

        3
  •  1
  •   Chris Wallace    15 年前

    如果可以执行XQuery,那么XQuery断言:

    every $i in (1 to count ($x/row) - 1)
    satisfies 
       let $j :=  $i + 1   
       return number($x/row[$i]/b) <= number($x/row[$j]/b)
    

    其中$x是文档,如果行按b的升序排列,则为true,否则为false。