2

Groovy でいくつかの単純な XML 解析と次のテストをテストしています。

assertEquals("TestSuiteParameter1", testSuite.props[0].name)

非常に厄介なエラーが発生します:

expected:<TestSuiteParameter1> but was:<TestSuiteParameter1>

Groovy assert キーワードを使用すると、同じエラーが発生します (ただし、奇妙なスタック トレースが使用されます)。ある種のタイプの不一致が起こっているに違いありませんが、私はGroovy n00bが多すぎて何が何であるかを理解できません。

それぞれのクラスを出力すると、次のようになります。

println testSuite.props[0].name.getClass()
println "TestSuiteParameter1".getClass()
println 'TestSuiteParameter1'.getClass()

class groovy.util.slurpersupport.Attributes
class java.lang.String
class java.lang.String
4

1 に答える 1

4

testSuite.props[0].nameはおそらく aであり、 a ではStringありませんがGString"TestSuiteParameter1"左側GStringは二重引用符のおかげで a です。一重引用符に変更すると、おそらく合格します。

これは groovy でよくある問題です。紛らわしいことに、"x" != 'x'.

ドキュメントから: http://groovy.codehaus.org/Strings+and+GString

GString と String は 2 つの異なるクラスであるため、GString オブジェクトを Map オブジェクトのキーとして使用したり、GString オブジェクトを含む比較を行ったりすると、String オブジェクトと組み合わせると予期しない結果が生じる可能性があります。等しくなる。

于 2012-04-24T15:34:48.123 に答える