Java 向Gradle添加额外的测试套件

Java 向Gradle添加额外的测试套件,java,unit-testing,junit,integration-testing,gradle,Java,Unit Testing,Junit,Integration Testing,Gradle,我正在尝试将Gradle(1.4)添加到一个具有多个测试套件的现有项目中。位于src/test/java中的标准单元测试成功运行,但我在设置任务以运行位于src/integration test/java中的JUnit测试时遇到问题 当我运行gradle intTest时,我在src/main中发现了几个类的找不到symbol错误。这使我相信依赖项设置不正确。如何设置intTest,以便它运行JUnit集成测试 build.gradle apply plugin: 'java' sourceC

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

当我运行
gradle intTest
时,我在
src/main
中发现了几个类的
找不到symbol
错误。这使我相信依赖项设置不正确。如何设置
intTest
,以便它运行JUnit集成测试

build.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
}
详细信息:渐变1.4

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

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

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
    }
}

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

另一种方式:

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

task testIntegration(type: Test) {
    include '**/*IntegrationTest*'
    ...
}

谢谢,我只需要显式设置
compileClasspath
。在Gradle 1.6中,运行时类路径自动设置为
classes+compileClasspath
,您将找不到
classes
。改为使用
输出
。是否链接一些文档以支持此操作?Thanks@MikeRylander关于什么的文档?如果是关于
+=
操作符,你可以看到
FileCollection
有一个
plus
方法来支持重写
+
+=/code>操作符:我看到integrationTest源集正在扩展测试类路径,但是第二个代码块在做什么呢?@MikeRylander啊,很抱歉,这不是帖子的一部分。已修复。可能的副本
sourceSets {
    integrationTest {
        compileClasspath += sourceSets.test.compileClasspath
        runtimeClasspath += sourceSets.test.runtimeClasspath
    }
}
test {
    exclude '**/*IntegrationTest*'
    ...
}

task testIntegration(type: Test) {
    include '**/*IntegrationTest*'
    ...
}