我正在尝试遵循https://selimober.com/gradle_unit_integration/
使用略有不同的文件结构:
src/test/integration/groovy
src/test/unit/groovy
src/test/resources
运行“渐变集成”-编译运行正常,类文件出现在:
build/classes/integration
build/classes/main/
但是测试本身永远不会运行。我想我缺少依赖项中的一部分,或者缺少集成到正在运行的测试的链接,但无法弄清我缺少了什么。除非它必须更改文件结构并在任务名称中添加Test(例如“integrationTest”)
我尝试添加:
check.dependsOn integration
和
integrationCompile sourceSets.main.output
integrationCompile configurations.testCompile
integrationCompile sourceSets.test.output
integrationRuntime configurations.testRuntime
和
task integ(type: Test) {
testClassesDir = sourceSets.integ.output.classesDir
classpath = sourceSets.integ.runtimeClasspath
}
但这要么没有改变任何东西,要么给了我类似以下错误:
Could not find method integrationCompile() for arguments [main classes] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
谢谢你的帮助。
我的build.gradle文件:
apply plugin: 'groovy'
repositories {
maven {
url repository_url
credentials {
username = artifactory_user
password = artifactory_password
}
}
}
dependencies {
compile(
'com.oracle:ojdbc6:11.2.0.1.0',
'javax.xml.bind:jsr173_api:1.0',
'org.apache.directory:groovy-ldap:1.0',
'org.codehaus.groovy:groovy-all:2.4.5',
'weblogic:wlfullclient:10.3.6',
'javax.jms:jms:1.1'
)
testCompile(
'junit:junit:4.12',
'org.spockframework:spock-core:1.0-groovy-2.4'
)
}
sourceSets {
unit {
groovy {
srcDir file('src/test/unit/groovy')
exclude '**/integration/**'
}
resources {
srcDir file('src/test/resources')
}
compileClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
runtimeClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
}
integration {
groovy {
srcDir 'src/test/integration/groovy'
exclude '**/unit/**'
}
resources {
srcDir 'src/test/resources'
}
compileClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
runtimeClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
}
}
configurations {
unitCompile.extendsFrom testCompile
unitRuntime.extendsFrom testRuntime
integrationCompile.extendsFrom testCompile
integrationRuntime.extendsFrom testRuntime
}
task unit(type: Test) {
include '**/unit/**'
testClassesDir = sourceSets.unit.output.classesDir
classpath = sourceSets.unit.runtimeClasspath
}
task integration(type: Test) {
include '**/integration/**'
testClassesDir = sourceSets.integration.output.classesDir
classpath = sourceSets.integration.runtimeClasspath
outputs.upToDateWhen { false }
}
最佳答案
问题出在您的任务中:
task unit(type: Test) {
include '**/unit/**'
}
task integration(type: Test) {
include '**/integration/**'
}
您不需要,文件夹由源集定义。包含将导致测试仅限于其软件包包含“单位”或“单位”的类。 “积分”。
删除它,您的测试应该运行。
顺便说一句,您不需要这些都不排除:
sourceSets {
unit {
groovy {
exclude '**/integration/**'
}
}
}