GroovyAssert:要比较的xml节点

ie3xauqp  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(110)

我有一个xml:

<body>
    <car>
        <color>green</color>
        <nr>88</nr>
    </car>
    <car>
        <color>yellow</color>
        <nr>54</nr>
    </car>
    <car>
        <color>blue</color>
        <nr>89</nr>
    </car>
    <car>
        <color>red</color>
        <nr>17</nr>
    </car>
    <car>
        <color>white</color>
        <nr>64</nr>
    </car>
</body>

我想确定颜色是白、绿、蓝、黄、红(顺序不重要)。所以我写了一个脚本:

import groovy.util.XmlSlurper

def pXml = new XmlSlurper().parseText('<body><car><color>green</color><nr>88</nr></car><car><color>yellow</color><nr>54</nr></car><car><color>blue</color><nr>89</nr></car><car><color>red</color><nr>17</nr></car><car><color>white</color><nr>64</nr></car></body>')
def actual = pXml.car.color.sort(true) {it.text()}
def expected = ['blue', 'green', 'red', 'white', 'yellow'].sort()
assert expected==actual

请原谅我,如果它看起来很奇怪,我是新的编程。我累了它在在线groovy解析器和SoapUI,但我总是得到:

Caught: Assertion failed: 

assert expected==actual
       |       | |
       |       | [blue, green, red, white, yellow]
       |       false
       [blue, green, red, white, yellow]
Assertion failed: 

assert expected==actual
       |       | |
       |       | [blue, green, red, white, yellow]
       |       false
       [blue, green, red, white, yellow]

at main.run(main.groovy:6)

恳请指教

bn31dyow

bn31dyow1#

您可以使用集合来代替排序

def actual = pXml.car.color*.text() as Set
Set expected = ['blue', 'green', 'red', 'white', 'yellow']
assert expected==actual

顺便说一句,你的问题就在这里:

def actual = pXml.car.color.sort(true) {it.text()}

这就是取所有的节点,并按它们的文本排序。
它返回的不是字符串列表,而是节点列表。
如果要继续使用列表,可以将其更改为:

def actual = pXml.car.color*.text().sort(true)

排序字符串文本而不是节点

相关问题