web-dev-qa-db-ja.com

GradleがKotlinおよびJUnit 5でのテストを見つけられません

KotlinとJunit 5を使用していくつかの基本的な単体テストを作成しました。残念ながら、Intellij IDEAから実行すると、Gradleによってテストが見つかりません。 Gradleから「指定されたインクルードのテストが見つかりません:[de.mhaug.phd.btcwallet.BasicTests]」というメッセージと、Intellijから「Test event not received」というメッセージが表示されます。

興味深いことに、コマンドラインから "./gradlew:clean:test"を指定して実行すると、ビルドが成功したことが報告されます。ただし、私の最初のテストは明らかに赤であるため、Gradleが実行しなかったことを示しています。

私はすでにより詳細な出力でそれを実行しようとしましたが、役立つものは何も表示されませんでした。最小限の(動作しない)例を以下に示します。

package de.mhaug.phd.btcwallet

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Test

class BasicTests {
  @Test
  fun hey() {
    assertEquals(3,1+1)
  }

  @Test
  fun hey2() {
    assertFalse(3==1+1)
  }
}

これは私のbuild.gradleです:

buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'de.mhaug.phd'
version '1.0-SNAPSHOT'

apply plugin: 'kotlin'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile group: 'org.bouncycastle', name: 'bcprov-jdk16', version: '1.46'
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.0.2'
    testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.0.2'
//    testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: ''
//    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.0.2'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

Intellij/Gradleでテストを実行するにはどうすればよいですか?

25
icehawk

いいえ、@ JB Nizetの最初のコメントで指摘されています。JUnit5の依存関係にtest.useJUnitPlatform()を追加します。それが道です。

http://junit.org/junit5/docs/current/user-guide/#running-tests-build-gradle

test {
    useJUnitPlatform()
}

または:

dependency {
    ...
    // junit 5
    testImplementation ('org.junit.jupiter:junit-jupiter-api')
    testCompile ('org.junit.jupiter:junit-jupiter-params')
    testRuntime ('org.junit.jupiter:junit-jupiter-engine')
    testCompile ('org.mockito:mockito-junit-jupiter')
    test.useJUnitPlatform() // fix "test events not received" bug in IDEA
}

この回答ではなく、彼のコメントに投票してください!

18
WesternGun

テストが実行されないという特定の問題は、すべてを最新バージョン(Gradle、Kotlin、IntelliJなど)に更新することで解決されたか、解決されると思います。現時点ではすべてが非常に速く動いているため、最新の状態に保つことは必須です。

「テストイベントが受信されませんでした」について

私の知る限り、これは一種の期待です。重要なのは、Gradleタスクを使用する場合、テストが実行されたことを信頼するか、テストごとのログを表示する方法を理解することです。

「gradleタスクの実行」または「IntelliJを使用したテストの実行」(たとえば、テストの横にあるガターアイコンをクリックするなど)を区別する必要があります。

IntelliJから実行します。

IntelliJは、Gradleと見事に統合されています。つまり、IntelliJから実行すると、(Gradle経由で)テストが実行されるだけでなく、いくつかの素晴らしいテスト結果も表示されます。これらはすべて、JUnit 5、Kotlintest、Spekで、通常のGradleまたはGradle Kotlin DSLを使用するか、使用しているものであれば何でも使用できます。

恥知らずな自己宣伝:JUnit 5とGradle(Gradleテストロギングも表示): JUnit 5をGradleで使用する方法 とJUnit 5、Kotlintest、Gradle Kotlin DSL: kotlintestの実行方法Gradle Kotlin DSLを使用したテスト?

Gradleタスクの実行

ただし、Gradleツールウィンドウを使用してGradleタスクを実行すると、「テストイベントは受信されませんでした」と表示されます。これは、テストを実行するGradleタスクを実行するだけで、IntelliJ自体には何の関係もないため、結果を報告するという点では統合されません。コマンドラインに出力されるだけです。

たとえば、Kotlinの実行と比較してください。 Gradleタスクを使用すると、build/に出力されます。ただし、ガターアイコンを使用してメインメソッドを実行すると、IntelliJを使用すると、out/に出力されます。これらは実行中の2つの異なるものです。

2
PHPirate

私はJava 11とJUnit 5で同じ問題に直面しました。クラスを公開するとすぐに動作し始めました。

0