8

Gradle (2.1) と IntelliJ (14.0.2) がうまく動作するようにしようとしています。具体的には、統合テスト用の別のソース セットを含むサンプル Gradle プロジェクトを IntelliJ にインポートしました。

プロジェクトは、コマンド ラインで Gradle を使用して正常にビルドされ、統合テストを正常に実行できます。一方、IntelliJ 内で実行する場合、次の 2 つの問題があります。

1) IntelliJ 内でのコンパイルが失敗します。これは、解決に失敗したサードパーティ ライブラリ (commons-collections) への統合テストの依存関係が原因です。

2) 上記の依存関係を削除してコンパイルすると、IntelliJ 内で統合テストを実行できません。次のエラー メッセージが表示されます。

指定されたインクルードのテストが見つかりません: [org.gradle.PersonIntegrationTest.canConstructAPersonWithAName]

ファイル構造は次のようになります。

src
  integration-test
    java
    resources
  main
    java
    resources
  test
    java
    resources
build.gradle

そしてbuild.gradle:

apply plugin: 'java'

repositories {
    mavenCentral()
}

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

dependencies {
    testCompile 'junit:junit:4.11'
    integrationTestCompile 'commons-collections:commons-collections:3.2'
    integrationTestCompile sourceSets.main.output
    integrationTestCompile configurations.testCompile
    integrationTestCompile sourceSets.test.output
    integrationTestRuntime configurations.testRuntime
}

task integrationTest(type: Test, dependsOn: jar) {
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
    systemProperties['jar.path'] = jar.archivePath
}

check.dependsOn integrationTest

この作業を行う方法についてのアイデアは大歓迎です。

Gradle の完全なサンプル プロジェクトは、Gradle ディストリビューションの samples/java/withIntegrationTests にあります。

4

1 に答える 1

9

integrationTest構成のエントリを TEST 依存関係としてプロジェクトにマップするように IDEA に指示する必要があります。ソース ルート ディレクトリも追加する必要があるかどうかはわかりません。重要な部分は次のとおりです。

idea {
  module {
    //and some extra test source dirs
    testSourceDirs += file('some-extra-test-dir')
    generatedSourceDirs += file('some-extra-source-folder')
    scopes.TEST.plus += [ configurations.integrationTest ]
  }
}

詳細はhttp://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.htmlで説明されています


ダニエルのコメントを反映するための編集: generatedSourceDirsis is Gradle 2.2+. テストタスクを設定するには、次のようなタスクを使用します

task integTest(type: Test) {
    description = 'Runs the integration tests.'
    group = 'verification'
    testClassesDir = sourceSets.integTest.output.classesDir
    classpath = sourceSets.integTest.runtimeClasspath
    reports.junitXml.destination = file("${project.testResultsDir}/$name")
    reports.html.destination = file("${project.reporting.baseDir}/$name")
    shouldRunAfter test
}
check.dependsOn integTest
于 2014-12-15T16:40:09.063 に答える