12

我正在尝试将 Gradle (1.4) 添加到具有多个测试套件的现有项目中。位于 中的标准单元测试src/test/java运行成功,但我在设置任务以运行位于src/integration-test/java.

当我运行时,gradle intTestcannot find symbolsrc/main. 这使我相信依赖项设置不正确。如何设置intTest以便它运行我的 JUnit 集成测试?

构建.gradle

apply plugin: 'java'

sourceCompatibility = JavaVersion.VERSION_1_6

sourceSets {
    integration {
        java {
            srcDir 'src/integration-test/java'
        }
        resources {
            srcDir 'src/integration-test/resources'
        }
    }
}

dependencies {
    compile(group: 'org.springframework', name: 'spring', version: '3.0.7')

    testCompile(group: 'junit', name: 'junit', version: '4.+')
    testCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+')
    testCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+')
    testCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE')

    integrationCompile(group: 'junit', name: 'junit', version: '4.+')
    integrationCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+')
    integrationCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+')
    integrationCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE')
}


task intTest(type: Test) {
    testClassesDir = sourceSets.integration.output.classesDir
    classpath += sourceSets.integration.runtimeClasspath
}

详细信息: Gradle 1.4

解决方案:我没有为集成测试源集设置编译类路径(见下文)。在我的 I 代码中,我将编译类路径设置为,sourceSets.test.runtimeClasspath这样我就没有“integrationCompile”的重复依赖项

sourceSets {
    integrationTest {
        java {
            srcDir 'src/integration-test/java'
        }
        resources {
            srcDir 'src/integration-test/resources'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}
4

3 回答 3

9

“集成”源集尚未配置其编译和运行时类路径。这就是为什么它无法从您的主要资源集中找到类的原因。您可以通过以下方式配置编译和运行时类路径:

sourceSets {
    integTest {
        java.srcDir file('src/integration-test/java')
        resources.srcDir file('src/integration-test/resources')
        compileClasspath = sourceSets.main.output + configurations.integTest
        runtimeClasspath = output + compileClasspath
    }
}
于 2013-05-27T05:55:10.440 回答
6

在大多数情况下,您希望使用与单元测试相同的依赖项以及一些新的依赖项。这会将单元测试的依赖项添加到现有集成测试的依赖项之上(如果有的话)。

sourceSets {
    integrationTest {
        compileClasspath += sourceSets.test.compileClasspath
        runtimeClasspath += sourceSets.test.runtimeClasspath
    }
}
于 2014-08-08T17:12:58.337 回答
0

另一种方式:

test {
    exclude '**/*IntegrationTest*'
    ...
}

task testIntegration(type: Test) {
    include '**/*IntegrationTest*'
    ...
}
于 2020-01-27T07:43:10.510 回答