我有两个scala.xml.Elem对象(实际的,预期的)。我使用的是JUnit4,但也包括了XMLUnit1.3
有没有简单的方法来比较这两个对象是否相等,忽略XML中的属性顺序和不重要的空格
我尝试了XMLUnit.assertXMLEqual(),但它抱怨类型是scala.xml.Elem
我知道我可以使用equals或==,但我希望在两个值不相等时使用断言打印这两个值。如果我使用assertTrue(实际的.equals(预期的)),并且它们不相等,那么唯一的输出将是“assertion failed”
如果要与忽略空白的XMLElem对象进行比较,可以使用scala.XML.Utility.trim方法从中删除空白
scala>;val a=<;foo>;酒吧</foo>;
a:scala.xml.Elem=<;foo>;酒吧</foo>;
scala>;val b=<;foo>;酒吧</foo>;
b:scala.xml.Elem=<;foo>;酒吧</foo>;
scala>;a==b
res8:Boolean=false
scala>;导入scala.xml.Utility.trim
导入scala.xml.Utility.trim
scala>;修剪(a)==修剪(b)
res9:Boolean=true
如果使用XML文本,Scala不关心属性的顺序:
scala>;val a=<;foo first=“1”second=“2”/>;
a:scala.xml.Elem=<;foo first=“1”second=“2”></foo>;
scala>;val b=<;foo second=“1”first=“1”/>;
b:scala.xml.Elem=<;foo first=“1”second=“1”></foo>;
scala>;a==b
res22:Boolean=true
我建议对单元测试使用ScalaTest,因为您有ShouldMatchers:
//Scala repl在类路径中以scalatest-1.2.jar启动
scala>;val a=<;foo>;酒吧</foo>;
a:scala.xml.Elem=<;foo>;酒吧</foo>;
scala>;val b=<;foo>;酒吧</foo>;
b:scala.xml.Elem=<;foo>;酒吧</foo>;
scala>;a应等于(b)
scala>;val b=<;foo>;bar2</foo>;
b:scala.xml.Elem=<;foo>;bar2</foo>;
scala>;a应等于(b)
org.scalatest.TestFailedException:<;foo>;酒吧</foo>;不等于<;foo>;bar2</foo>;
在org.scalatest.matchers.matchers$class.newTestFailedException上(matchers.scala:148)
在org.scalatest.matchers.ShouldMatchers$.newTestFailedException上(ShouldMatchers.scala:2329)
位于org.scalatest.matchers.ShouldMatchers$ShouldMethodHelper$.shouldMatcher(ShouldMatchers.scala:871)
位于org.scalatest.matchers.ShouldMatchers$SeqShouldWrapper.should(ShouldMatchers.scala:1724)
at<;初始化>;(<;控制台>;:15)
at<;clinit>;(<;控制台>;)
在请求时结果$<;初始化>;(<;控制台>;:9)
在请求时结果$<;clinit>;(<;控制台>;)
请求时结果$scala\u repl\u结果(<;console>;)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在阳光下。反射。德莱加。。。