2013-05-16 68 views
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),並從我的域類的映射中刪除數據源配置,它也可以使用。

我不知道爲什麼有一個命名的數據源導致夾具數據要麼插入兩次,要麼在每次測試後都沒有清理乾淨。有任何想法嗎?

+0

我有一些問題試圖/使用燈具重新創建您的問題,無法識別'spock'集成測試中的'域'類嗎? build-test-data不是一個可行的選擇嗎?你正在使用哪個版本的Grails? – dmahapatro

+0

我不確定您的構建測試數據是什麼意思。我正在使用Grails 2.0.4 – maximum

+0

我的意思是[build-test-data](http://grails.org/plugin/build-test-data)插件? – dmahapatro

回答

相關問題