1

我正在开发一个带有自己的域类的 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_myDatadataSource)并从我的域类的映射中删除数据源配置,它也可以工作。

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

4

1 回答 1

1

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

于 2013-08-13T17:08:04.097 回答