Я пытаюсь написать интеграцию с помощью Spock, но я борюсь с спящим режимом, поскольку у меня есть особый сценарий. Это в основном сценарий:Промывка в интеграционном тесте
У меня есть метод в службе, который суммирует некоторую информацию из таблицы. Эта услуга соединяется с базой данных, используя класс groovy.sql.Sql
def sql = new groovy.sql.Sql(dataSource)
sql.execute("insert into summary_table .... values from content_table")
Затем, в тесте интеграции, в первую очередь я вставляя случайные данные в таблице контента с помощью плагина сборки тест-данных, используя метод 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
}
Тогдашний блок является более сложным, но я думаю, что он будет служить, чтобы объяснить эту проблему.
Я думаю, что проблема связана с спящим и когда транзакция должна быть совершена. Может ли кто-нибудь помочь мне с этим?
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
не уверен, как вы создаете 'ContentTable' ... вы проверили' ContentTable.build(). Save() 'не возвращаете' null', чтобы убедиться, что в построенном объекте нет ошибки? – evanwong
ContentTable заполняется должным образом. Я отлаживаю IntelliJ IDEA и некоторые точки останова, и он имеет правильное значение, но по любой причине при вызове службы метода иногда эта таблица не имеет полного содержимого. –
Из соображений удобства: когда он терпит неудачу, он не работает одним? или это просто случайное число? – cfrick