scala – 为什么java.util.Date对象满足一个Specs测试但是失败另
我正在尝试使用Play Framework 2.0和Specs2测试模型方法. Global.
scala在首次运行时使用数据填充数据库.在一个测试中,我可以使用如下代码成功测试它:
def dateHelper(str: String): Date = new SimpleDateFormat("MM/dd/yyyy").parse(str) "Food model" should { "be retrieved by id" in { val Some(mashedPotatoes) = Food.findById(1000) mashedPotatoes.name must equalTo("Mashed Potatoes") mashedPotatoes.eaten must equalTo(false) mashedPotatoes.id must equalTo(Id(1000)) mashedPotatoes.owner must equalTo(Id(1)) mashedPotatoes.expiry must equalTo(dateHelper("05/21/2012")) } } 那个测试通过了.但是如果我尝试从模型中选择多个项目,并将其作为列表进行测试: "return food for test user in " in { running(FakeApplication()) { val testFoods: Seq[Food] = Food.findFoodFor(Id(1)) // Test user's ID is 1 // This test fails testFoods must equalTo( List( Food(Id(1001),"Fried Green Tomatoes",false,Id(1),dateHelper("04/21/2012")),Food(Id(1000),"Mashed Potatoes",dateHelper("05/21/2012")) ) ) // This test passes testFoods.head.expiry must equalTo(dateHelper("04/21/2012")) } } 错误输出告诉我日期字段不相等: [error] x return food for test user in [error] 'Food(1001,Fried Green Tomatoes,1,2012-04-21 00:00:00.0),Food(1000,Mashed Potatoes,2012-05-21 00:00:00.0)' is not equal to 'Food(1001,Sat Apr 21 00:00:00 EDT 2012),Mon May 21 00:00:00 EDT 2012)' (ModelSpec.scala:66) [error] Expected: ...se,[Sat Apr ]21...00[ EDT 2]0[12]),...1,[Mon May ]21...00[ EDT 2]0[12]) [error] Actual: ...se,[2012-04-]21...00[.]0[]),[2012-05-]21...00[.]0[]) 这里有什么我想念的东西吗? 编辑:它看起来像是DB模式,它将到期列设置为timestamp类型,而不是date类型. 这里更有帮助的信息:java.util.Date vs java.sql.Date 解决方法
问题可能是因为数据从数据库加载的方式.我打赌它使用的是
java.sql.Timestamp 而不是
java.util.Date .
scala> val date = dateHelper("05/12/1974") d: java.util.Date = Sun May 12 00:00:00 CDT 1974 scala> val dbDate = new java.sql.Timestamp(d.getTime) dbDate: java.sql.Timestamp = 1974-05-12 00:00:00.0 scala> date == dbDate res6: Boolean = true scala> dbDate == date // prepare to be amazed! res5: Boolean = false 如果您阅读the fine print in the Javadoc,您会发现这个不错的小声明:
您的ORM映射或数据库架构可能有问题.列是DATE还是TIMESTAMP或TIMESTAMP WITH TIMEZONE?如果它是DATE,你应该将它映射到 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |