【问题标题】:Integration test on Gradle 4.0-milestone2Gradle 4.0-milestone2 上的集成测试
【发布时间】:2017-10-30 13:57:24
【问题描述】:

我正在将 Java 库迁移到 Gradle 4.0-milestone2,但在下面定义的集成任务中遇到了一些问题。

此任务允许我拥有两个不同的源目录 src/testsrc/integration 并拥有单独的 gradle 任务来运行它们,./gradlew test./gradlew integration

integration.gradle的内容

sourceSets {
  integration {
    java {
      compileClasspath += main.output + test.output
      runtimeClasspath += main.output + test.output
      srcDir file('src/integration/java')
    }
    resources.srcDir file('src/integration/resources')
  }
}
configurations {
  integrationCompile.extendsFrom testCompile
  integrationRuntime.extendsFrom testRuntime
}
idea {
  module {
    testSourceDirs += file('src/integration/java')
    scopes.TEST.plus += [configurations.integrationCompile]
  }
}
task integration(type: Test) {
  testClassesDir = sourceSets.integration.output.classesDir
  classpath = sourceSets.integration.runtimeClasspath
}

integration.mustRunAfter test

build.gradle的内容

apply plugin: 'java-library'
apply plugin: 'idea'

apply from: './integration.gradle'

targetCompatibility = '1.7'
sourceCompatibility = '1.7'

dependencies {

  api 'com.github.ihsanbal:LoggingInterceptor:2.0.0'
  api 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
  api 'com.squareup.retrofit2:retrofit:2.0.2'
  api 'com.squareup.retrofit2:converter-gson:2.0.2'
  api 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

  testImplementation 'junit:junit:4.12'
}

test {
  testLogging.showStandardStreams = true
}


task copyTestResources(type: Copy) {
  from sourceSets.test.resources
  into sourceSets.test.output.classesDir
}
processTestResources.dependsOn copyTestResources

这个配置有两个问题。

1) copyTestResources 任务不起作用,因为 classesDir 已弃用且 classesDirs 不兼容。

2) 类路径不包括库依赖项。 编译失败充满以下错误

error: cannot find symbol
error: package SOMETHING does not exist

关于如何解决这个问题的任何线索?谢谢

【问题讨论】:

    标签: gradle android-gradle-plugin build.gradle gradlew


    【解决方案1】:

    tips on the Gradle forum 之后,我让它工作了。

    build.gradle

    apply plugin: 'java-library'
    apply plugin: 'idea'
    
    apply from: './integration.gradle'
    
    targetCompatibility = '1.7'
    sourceCompatibility = '1.7'
    
    dependencies {
    
      api 'com.github.ihsanbal:LoggingInterceptor:2.0.0'
      api 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
      api 'com.squareup.retrofit2:retrofit:2.0.2'
      api 'com.squareup.retrofit2:converter-gson:2.0.2'
      api 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
    
      testImplementation 'junit:junit:4.12'
    }
    test {
      testLogging.showStandardStreams = true
    }
    

    integration.gradle

    sourceSets {
      integration {
        java {
          compileClasspath += main.output + test.output
          runtimeClasspath += main.output + test.output
          srcDir file('src/integration/java')
    
          integration.runtimeClasspath += integration.output
        }
        resources.srcDir file('src/integration/resources')
      }
    }
    configurations {
      integrationImplementation.extendsFrom testImplementation
      integrationRuntimeOnly.extendsFrom testRuntimeOnly
    }
    idea {
      module {
        testSourceDirs += file('src/integration/java')
        scopes.TEST.plus += [configurations.integrationRuntimeClasspath, configurations.integrationCompileClasspath]
      }
    }
    task integration(type: Test) {
      testClassesDirs += sourceSets.integration.output.classesDirs
      classpath = sourceSets.integration.runtimeClasspath
    }
    integration.mustRunAfter test
    

    仍然需要弄清楚如何从 IDE 内部运行它们,因为它目前无法正常工作,但至少我可以再次拥有 CI。

    【讨论】:

    • 非常感谢这个问题和答案,帮助很大!对我来说唯一的事情是,现在如果我运行集成测试,单元测试也会运行。你有没有遇到过类似的事情?
    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2020-09-02
    相关资源
    最近更新 更多