web-dev-qa-db-ja.com

Gradleテストの依存関係

プロジェクトAとプロジェクトBの2つのプロジェクトがあります。どちらもgroovyで作成されており、ビルドシステムとしてgradleを使用しています。

プロジェクトAにはプロジェクトBが必要です。これは、コンパイルコードとテストコードの両方に当てはまります。

プロジェクトAのテストクラスがプロジェクトBのテストクラスにアクセスできるように構成するにはどうすればよいですか?

72

「テスト」構成を介してテストクラスを公開し、その構成にtestCompile依存関係を定義できます。

すべてのJavaプロジェクトにこのブロックがあり、すべてのテストコードをjarします。

task testJar(type: Jar, dependsOn: testClasses) {
    baseName = "test-${project.archivesBaseName}"
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testJar
}

次に、テストコードがあるときに、使用するプロジェクト間でアクセスしたい

dependencies {
    testCompile project(path: ':aProject', configuration: 'tests')
}

これはJava用です。 groovyでも機能するはずだと思います。

99
David Resnick

これは、中間のjarファイルを必要としない簡単なソリューションです。

dependencies {
  ...
  testCompile project(':aProject').sourceSets.test.output
}

この質問にはさらに議論があります。 gradleを使用したマルチプロジェクトテストの依存関係

14
Kip

これは私のために働く(Java)

// use test classes from spring-common as dependency to tests of current module
testCompile files(this.project(':spring-common').sourceSets.test.output)
testCompile files(this.project(':spring-common').sourceSets.test.runtimeClasspath)

// filter dublicated dependency for IDEA export
def isClassesDependency(module) {
     (module instanceof org.gradle.plugins.ide.idea.model.ModuleLibrary) && module.classes.iterator()[0].url.toString().contains(rootProject.name)
}

idea {
      module {
          iml.whenMerged { module ->
              module.dependencies.removeAll(module.dependencies.grep{isClassesDependency(it)})
              module.dependencies*.exported = true
          }
      }
  }
.....  
// and somewhere to include test classes 
testRuntime project(":spring-common")
8

上記のソリューションは機能しますが、最新バージョンでは機能しません1.0-rc3 Gradle。

     task testJar(type: Jar, dependsOn: testClasses) {
       baseName = "test-${project.archivesBaseName}"

       // in the latest version of Gradle 1.0-rc3
       // sourceSets.test.classes no longer works
       // It has been replaced with 
       // sourceSets.test.output

       from sourceSets.test.output
     }
5
pokkie

ProjectAにProjectBで使用するテストコードが含まれており、ProjectBがartifactsを使用してテストコードを含める場合、ProjectBのbuild.gradleは次のようになります。

dependencies {

  testCompile("com.example:projecta:1.0.0-SNAPSHOT:tests")

}

次に、ProjectAのbuild.gradleのarchivesセクションにartifactsコマンドを追加する必要があります。

task testsJar(type: Jar, dependsOn: testClasses) {
    classifier = 'tests'
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testsJar
    archives testsJar
}

jar.finalizedBy(testsJar)

ProjectAのアーティファクトがアーティファクトに公開されると、-tests jarが含まれます。この-tests jarは、ProjectBのtestCompile依存関係として追加できます(上記を参照)。

2
Joman68

Android最新のgradleバージョン(現在2.14.1))では、プロジェクトAからすべてのテスト依存関係を取得するには、プロジェクトBに以下を追加するだけです。

dependencies {
  androidTestComplie project(path: ':ProjectA')
}
1
santugowda

Gradle 1.5

task testJar(type: Jar, dependsOn: testClasses) {
    from sourceSets.test.Java
    classifier "tests"
}
0
Robin Elvin