我正在开发一个带有自己的域类的 Grails 插件。在我开始使用命名数据源之前,我的集成测试运行良好。现在,当我运行我的测试时,我的测试中每次调用都会在数据库中复制夹具数据fixtureLoader.load()
。
这是我的域对象、夹具等的示例:
程序.groovy:
package mydomain
class Program {
String name
String code
static mapping = {
datasource 'myData'
}
String toString() {
"$name ($code)"
}
}
程序数据.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
)并从我的域类的映射中删除数据源配置,它也可以工作。
我不知道为什么有一个命名的数据源会导致夹具数据要么被插入两次,要么在每次测试后都没有被清理。有任何想法吗?