如何将集成测试和单元测试定义为不同的Gradle task

更新时间:2017-07-31

问题描述

当集成测试比较耗时的时候,而有时候开发人员只需要单独运行单元测试。

解决方案

group 'java8-lambda'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations { // 1
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

dependencies {
	...
    integrationTestCompile sourceSets.main.output  // 2
    integrationTestCompile sourceSets.test.output  // 3
}


sourceSets {
    integrationTest {  // 4
        java.srcDir file('src/test-integration/java')  // 5
        resources.srcDir file('src/test-integration/resources')  // 6
    }
}

task integrationTest(type: Test) {  // 7
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}

总共有7个地方需要配置:

  • 继承testCompiletestCompileintegrationTestCompile中的integrationTest是自定义的名称。
  • integrationTestCompile的scope能够访问源码。
  • integrationTestCompile的scope能够访问默认测试目录下的源码。
  • 定义一个新的源码集integrationTest
  • integrationTest的源码目录指定为src/test-integration/java,需要在src下创建test-integration/java目录
  • integrationTest的资源目录指定为src/test-integration/resource,需要在src下创建test-integration/resource目录
  • 定义一个类型为Test的任务。

执行$ ./gradlew integrationTest运行integrationTest。

PS:目前不支持JUnit5。


Posted by Yuan Shenjian • July 31th, 2017 @ ThoughtWorks®

版权声明:自由转载•非商用•非衍生•保持署名 | Creative Commons BY-NC-ND 3.0

原文链接:http://sjyuan.cc/troubleshoots/gradle
支持原创