我试图利用我的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 文件的存在。
有什么想法吗?非常感谢!