Skip to main content

Kotlin + JUnit

方針

  • Python のサードパーティ コマンド pytest コマンドを使う
  • 標準ライブラリの unittest との併用もできるようだ

前提

bash
brew install gradle

プロジェクト作成

bash
mkdir -p ~/workdir/SampleKotlin
code ~/workdir/SampleKotlin
  • 設定ファイルはディレクトリ直下に置く
  • toolchain の指定は、Java と Kotlin でターゲットの JVM バージョンを揃えるためのもの
  • testLogging のブロックはコンソールに出る
settings.gradle.kts
settings.gradle.kts
rootProject.name = "SampleKotlin"
build.gradle.kts
build.gradle.kts
import org.gradle.api.tasks.compile.JavaCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
kotlin("jvm") version "2.2.21"
}

group = "example"
version = "1.0-SNAPSHOT"

repositories {
mavenCentral()
}

dependencies {
implementation(kotlin("stdlib"))

testImplementation("org.junit.jupiter:junit-jupiter:5.13.4")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

tasks.test {
useJUnitPlatform()

testLogging {
events("passed", "failed", "skipped")
exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
showStandardStreams = true
}
}

tasks.withType<JavaCompile>().configureEach {
options.release.set(24)
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_24)
}
}

最小のコード

src/main/kotlin/sample/Add.kt
package sample

fun add(a: Int, b: Int): Int {
return a + b
}
src/test/kotlin/sample/AddTest.kt
package sample

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

class AddTest {

@Test
fun twoPlusThree() {
assertEquals(5, add(2, 3))
}
}

決まりごと

  • フォルダ名: パッケージ名
  • クラス名 : *Test ← gradle task で この名前をテスト対象としている
  • 関数名 : 特に制約なし

実行

bash
gradle test --rerun-tasks

--rerun-tasks を指定しているのは、毎回全部実行してほしいから

表示例

成功時

  • 関数名は出ない → --verbose オプションつければ出る
  • 標準出力も出ない → --capture=no オプションつければ出る
txt
> Task :test

AddTest > twoPlusThree() PASSED

失敗時

txt
> Task :test FAILED

AddTest > twoPlusThree() FAILED
org.opentest4j.AssertionFailedError: expected: <5> but was: <6>
...

補足

テスト結果は HTML でも出力される。

  • build/reports/tests/test/index.html

以下広告