2012-04-24 6 views
1

私はGroovyで解析するいくつかの簡単なXMLと次のテストをテストしてい失敗しますGroovyのassertキーワード(ただし、巨大なスタックトレース)。私は何らかの種類の不一致が起こっていると思っていますが、何を理解するにはあまりにも多くのGroovy n00bです。ここでGroovyのユニットテストは、不思議な

は、それぞれのクラスを印刷するものです収量:左側"TestSuiteParameter1"は、二重引用符のおかげでGStringありながら

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 
+1

なぜスタックトレースを提供していませんか? – Quaternion

+0

失敗したテストのソースコードも同様に役立つかもしれません... –

+0

私が提供したエラーはスタックトレースの先頭であり、残りのテストケースは機能していましたので、質問を混乱させたくありませんでした。しかし確かに、私はおそらく、その事実をより明確にすべきだったでしょう。 – Fylke

答えて

2

testSuite.props[0].nameは、おそらくStringないGStringです。一重引用符に変更すると、おそらく通過します。

これはgroovyのよくある問題です。紛らわしく、"x" != 'x'。ドキュメントから

http://groovy.codehaus.org/Strings+and+GString

GString and String are two distinct classes, and hence use of GString objects as keys for Map objects or comparisons involving GString objects, can produce unexpected results when combined with String objects since a GString and a String won't have the same hashCode nor will they be equal.

+0

これは多かれ少なかれ問題でしたが、動作する前にtoString()を最後に追加する必要がありました。 – Fylke

+0

'testSuite.props [0] .name'が実際には' String'でもない限り、 'toString()'が必要であるとは思わないでしょう。しかし、 'toString()'は必ずそれを強制的に1にします。 –