!= b c 行为-6ren"> != b c 行为-我正在使用 scalatest 并想说 actualXML should be === expectedXML 尤其是 === 不关心属性顺序。但是,当使用 Scala XML 的 { ... } 语-6ren">
gpt4 book ai didi

xml - 在测试中避免 Scala XML 的 b {"c"} != b c 行为

转载 作者:行者123 更新时间:2023-12-04 06:07:30 26 4
gpt4 key购买 nike

我正在使用 scalatest 并想说

actualXML should be === expectedXML

尤其是 === 不关心属性顺序。但是,当使用 Scala XML 的 { ... } 语法嵌入文本时,断言失败,因为
scala> <a>b {"c"}</a>.child
res8: scala.xml.Node* = ArrayBuffer(b , c)

然而:
scala> <a>b c</a>.child
res9: scala.xml.Node* = ArrayBuffer(b c)

我可以写一个方法
import scala.xml.Elem
import scala.xml.XML
def launder(xml: Elem): Elem = XML.loadString(xml.toString)

给予
launder(actualXML) should be === expectedXML

但希望能够使用 Vanilla 语法。

最佳答案

你可以专门为 Xml Elem 引入你自己的 Equalizer 类:

class ElemEqualizer(left: scala.xml.Elem) {
def ===(right: Any) = new Equalizer(launder(left).===(launder(right))
}
implicit def convertToElemEqualizer(left: scala.xml.Elem) = new ElemEqualizer(left)

@Test def foobar(): Unit = {
val a = <a>b {"c"}</a>
val b = <a>b c</a>

assert(a === b)
}

所以你引入了另一个隐式转换,但这次是专门针对 Elem ,它比较了清洗过的 Elems。

关于xml - 在测试中避免 Scala XML 的 <a>b {"c"}</a> != <a>b c</a> 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com