刷新集成测试

时间:2014-10-02 14:09:51

标签: hibernate grails groovy spock

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

您确定您的ContentTable是否已正确创建?在我的测试中,我使用这个成语:

assert myObject.save() || myObject.errors.allErrors.empty
这样,它会立即打印出错误的内容,如果有的话。

其次,如果您使用最新的Grails 2.4,请记住默认情况下他们不会自动刷新。检查文档如何更改它,或保存(flush:true)。