Grails build-test-data插件 - 无法找到TestDataConfig.groovy

时间:2014-08-31 18:17:15

标签: unit-testing grails intellij-idea grails-plugin

我试图利用我的Grails(v2.4.3)应用中的build-test-data插件来协助为单元测试创​​建测试数据,但在运行我的单元测试时,插件无法找到 TestDataConfig.groovy 加载我的指定值(用于唯一约束测试等)。


我已经通过将插件包含在 BuildConfig.groovy 中来安装插件:

plugins {
    ...
    test ":build-test-data:2.2.0"
    ...
}

我已运行以下命令来创建 TestDataConfig.groovy 模板,该文件将文件放在\grails-app\conf\

grails install-build-test-data-config-template

我已按照plugin wiki上的一般说明提出格式正确的文件:

testDataConfig {
    sampleData {
        '<path>.User' {
            def a = 1
            username = { -> "username${a++}" }
        }
    }
}

路径是完全限定的类名。)


在我的测试中,我使用以下一般格式:

import grails.buildtestdata.TestDataConfigurationHolder
import grails.buildtestdata.mixin.Build
import grails.test.mixin.TestFor
import spock.lang.Specification
import spock.lang.Unroll

@TestFor(User)
@Build(User)
class UserSpec extends Specification {

    def setup() {
        mockForConstraintsTests(User)

        TestDataConfigurationHolder.reset()
        user = User.buildWithoutSave()
    }

    @Unroll
    void "test #field must be unique"() {
        given: 'a User exists'
            user.save(flush: true)

        when: 'another User is created with a non-unique field value'
            def nonUniqueUser = User.buildWithoutSave()
            nonUniqueUser."$field" = user."$field"

        then: 'validation fails and the field has a unique constraint error'
            !nonUniqueUser.validate()
            nonUniqueUser.errors.errorCount == 1
            nonUniqueUser.errors.getFieldError("$field").code == 'unique'

        where:
            field << ['username', '<some other field>']
    }
}

但是,当测试运行时(使用IntelliJ IDEA) TestDataConfig.groovy 无法通过插件中的以下方法找到:

static Class getDefaultTestDataConfigClass() {
    GroovyClassLoader classLoader = new GroovyClassLoader(TestDataConfigurationHolder.classLoader)
    String testDataConfig = Holders.config?.grails?.buildtestdata?.testDataConfig ?: 'TestDataConfig'
    try {
        return classLoader.loadClass(testDataConfig)
    } catch (ClassNotFoundException ignored) {
        log.warn "${testDataConfig}.groovy not found, build-test-data plugin proceeding without config file"
        return null
    }
}

因此测试在没有配置文件的情况下继续,我没有得到唯一生成的数据集。

我甚至尝试在 Config.groovy 中明确包含该文件:

grails.buildtestdata.testDataConfig = "TestDataConfig"

但是,插件中的相同方法显示Holders.config?为空。


我已经在StackOverflow上看了几个solutions类似的问题,在我的情况下没有任何工作;我无法弄清楚如何让我的应用程序检测到 TestDataConfig.groovy 文件的存在。

有什么想法吗?非常感谢!

0 个答案:

没有答案