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でテストを実行するにはどうすればよいですか?
いいえ、@ 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
}
この回答ではなく、彼のコメントに投票してください!
テストが実行されないという特定の問題は、すべてを最新バージョン(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つの異なるものです。
私はJava 11とJUnit 5で同じ問題に直面しました。クラスを公開するとすぐに動作し始めました。