我正在尝试遵循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/**'
        }
    }
}

10-05 20:23
查看更多