我正在使用Grails插件使用它自己的域类。我的集成测试工作正常,直到我开始使用命名数据源。现在,当我运行我的测试时,夹具数据在我的测试中每次调用fixtureLoader.load()
时都会在数据库中重复。
以下是我的域对象,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)]
如果我评论第二次测试,它可以正常工作。但是运行这两个测试会导致夹具数据被插入DB两次。
如果我更改了我的数据源并删除了指定的源(将dataSource_myData
更改为dataSource
)并从我的域类的映射中删除了数据源配置,它也可以。
我不知道为什么有一个命名数据源导致夹具数据要么插入两次,要么在每次测试后都没有清理干净。有什么想法吗?