私は次の問題で立ち往生しています: json への変換と json からの変換が対称であることを主張する specs2 仕様を書きたいです。ただし、joda 日時の日付でエラーが発生します。
'2012-04-17T00:04:00.000+02:00' is not equal to '2012-04-17T00:04:00.000+02:00'. Values have the same string representation but possibly different types like List[Int] and List[String] (TimeSpecs.scala:18)
これは、問題を示す最小限の仕様です
import org.joda.time.DateTime
import org.specs2.mutable.Specification
class TimeSpecs extends Specification {
"joda and specs2" should {
"play nice" in {
val date = DateTime.parse("2012-04-17T00:04:00+0200")
val date2 = DateTime.parse("2012-04-17T00:04:00+0200")
date === date2
}
"play nice through play json transform" in {
import play.api.libs.json._
import play.api.libs.json.Json._
val date = DateTime.parse("2012-04-17T00:04:00+0200")
val jsDate= toJson(date)
val date2= jsDate.as[DateTime]
date === date2
}
}
}
2 番目のテストで date と date2 を比較するにはどうすればよいですか? それらは同じですが、specs2はそれを認識していないようです:(
- - 編集
date.getClass.getCanonicalName を使用して実行時に型を「手動で」検査すると、期待どおりに org.joda.time.Datetime が返されます
import org.joda.time.DateTime
import org.specs2.mutable.Specification
class TimeSpecs extends Specification {
"joda and specs2" should {
"play nice" in {
val date = DateTime.parse("2012-04-17T00:04:00+0200")
val date2 = DateTime.parse("2012-04-17T00:04:00+0200")
date === date2
}
"play nice through play json transform" in {
import play.api.libs.json._
import play.api.libs.json.Json._
val date:DateTime = DateTime.parse("2012-04-17T00:04:00+0200")
val jsDate= toJson(date)
val date2:DateTim= jsDate.as[DateTime]
println(date.getClass.getCanonicalName) //prints org.joda.time.DateTime
println(date2.getClass.getCanonicalName)//prints org.joda.time.DateTime
date === date2
}
}
}
DateTime#isEqual を使用するとある程度は機能しますが、流暢なマッチャーの利点と、それらがもたらす有用なエラー メッセージを失います。さらに、私が実際に比較しようとしているのは、日付自体ではなく、たまたま日付を含むケース クラス インスタンスです。
使用する
date should beEqualTo(date2)
と同じエラーが発生します===