1
我正在使用它自己的域類的Grails插件。我的集成測試正常工作,直到我開始使用指定的數據源。現在,當我運行我的測試時,燈具數據在我的測試中每次調用fixtureLoader.load()
時都會在數據庫中得到重複。Grails在使用命名數據源時多次測試加載fixture數據
這是我的域對象,夾具等的一個示例:
Program.groovy:
package mydomain
class Program {
String name
String code
static mapping = {
datasource 'myData'
}
String toString() {
"$name ($code)"
}
}
programData.groovy:
import mydomain.*
fixture {
currentProg1(Program, name:'Program Name', code:'44')
}
我的數據源被配置成像這樣:
test {
dataSource_myData {
dbCreate = "create-drop"
url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
我的測試是這樣的:
package mydomain
import grails.plugin.spock.IntegrationSpec
class ProgramSpec extends IntegrationSpec {
def fixtureLoader
def "test current program list"() {
given:
def loader = fixtureLoader.load("programData")
when:
List results = Program.list()
then:
assert results.size() == 1
}
def "test toString"() {
given:
def loader = fixtureLoader.load("programData")
when:
def testCase = loader.currentProg1
then:
assert testCase.toString() == "Program Name (44)"
}
}
當我運行測試,我得到:
Failure: test current program list(com.sg.contract.guide.ProgramSpec)
Condition not satisfied:
results.size() == 1
| | |
| 2 false
[Program Name (44), Program Name (44)]
如果我註釋掉它工作正常,第二次測試。但是運行這兩個測試會導致夾具數據被插入數據庫兩次。
如果我更改數據源並刪除指定的源(將dataSource_myData
更改爲dataSource
),並從我的域類的映射中刪除數據源配置,它也可以使用。
我不知道爲什麼有一個命名的數據源導致夾具數據要麼插入兩次,要麼在每次測試後都沒有清理乾淨。有任何想法嗎?
我有一些問題試圖/使用燈具重新創建您的問題,無法識別'spock'集成測試中的'域'類嗎? build-test-data不是一個可行的選擇嗎?你正在使用哪個版本的Grails? – dmahapatro
我不確定您的構建測試數據是什麼意思。我正在使用Grails 2.0.4 – maximum
我的意思是[build-test-data](http://grails.org/plugin/build-test-data)插件? – dmahapatro