Grails使用命名数据源时多次测试加载夹具数据

时间:2013-05-16 21:06:38

标签: grails datasource integration-testing duplicates fixture

我正在使用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)并从我的域类的映射中删除了数据源配置,它也可以。

我不知道为什么有一个命名数据源导致夹具数据要么插入两次,要么在每次测试后都没有清理干净。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

它看起来像一个bug。我已创建了机票,请为其投票http://jira.grails.org/browse/GPFIXTURES-28