【发布时间】:2014-10-02 14:09:51
【问题描述】:
我正在尝试使用 Spock 编写集成,但由于我有一个特殊的场景,我正在努力使用休眠。基本上是这样的场景:
我在服务中有一个方法可以汇总表格中的一些信息。该服务使用 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
}
then 块更复杂,但我认为它可以解释问题。
我认为问题与休眠以及何时应该提交事务有关。有人可以帮我解决这个问题吗?
更新:我刚刚在运行 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
【问题讨论】:
-
不确定您是如何构建
ContentTable...您是否检查了ContentTable.build().save()不返回null以确保构建的对象中没有错误? -
ContentTable 正在正确填充。我正在使用 IntelliJ IDEA 和一些断点进行调试,它具有正确的值,但是在调用方法服务时出于任何原因,有时该表没有完整的内容。
-
出于好奇:当它失败时,它会失败一个吗?还是只是一个随机数?
-
它通常只失败一个记录,这更加疯狂。
标签: hibernate grails groovy spock