我正在尝试使用Spock编写集成,但我正在努力使用hibernate,因为我有一个特殊的场景。这基本上就是这种情况:
我在服务中有一个方法来汇总表中的一些信息。此服务使用类groovy.sql.Sql
连接数据库def sql = new groovy.sql.Sql(dataSource)
sql.execute("insert into summary_table .... values from content_table")
然后,在集成测试中,首先我使用build-test-data插件在内容表中插入随机数据,使用GORM方法save()
测试工作正常但有些时候,似乎在汇总数据时缺少content_table中的所有数据并且缺少一些行(不是全部,只有少数几行)。
这基本上是测试:
def "this is my failing test"() {
given:
100.times {
ContentTable.build().save()
}
when:
def results = myservice.summarisingContentTable()
then:
results.size() == 100
}
然后块更复杂,但我认为它将用于解释问题。
我认为这个问题与hibernate以及何时提交事务有关。有人可以帮我吗?
UPDATE :我在运行myservice.summarisingContentTable()之前刚刚设置了一个断点,并且有时尝试了不同结果的下一个查询,因此正确填充了ContentTable。
ContentTable.count()//returns the proper value
sql.execute("select count(*) as total from content_table").total //returns sometimes the proper value - 1, so one content_table record is missing
答案 0 :(得分:0)
您确定您的ContentTable是否已正确创建?在我的测试中,我使用这个成语:
assert myObject.save() || myObject.errors.allErrors.empty
这样,它会立即打印出错误的内容,如果有的话。
其次,如果您使用最新的Grails 2.4,请记住默认情况下他们不会自动刷新。检查文档如何更改它,或保存(flush:true)。