Kotest 프로젝트 설정(Setup)
의존성 추가
Kotest를 사용하기 위해서는 먼저 프로젝트에 라이브러리를 추가해야 한다. Kotest 테스트 프레임워크는 JVM, Javascript 및 Native에서 지원된다. 여러 플랫폼에서 Kotest를 사용하려면 아래 설명된 대로 개별 플랫폼에 맞게 대한 단계를 설정하면 된다.
JVM/Gradle
JVM/Gradle 프로젝트에서의 Kotest는 JUnit Platform gradle 플러그인을 사용한다.
Gradle 4.6 이상에서는 테스트 유형이 Test인 작업 내에 useJUnitPlatform()
을 추가하고, Kotest junit5 런처 종속성을 추가하기만 하면 된다.
Gradle + Groovy(빌드 파일: build.gradle
)를 사용하는 경우:
test {
useJUnitPlatform()
}
또는 Gradle + Kotlin(빌드 파일: build.gradle.kts
)을 사용하는 경우:
tasks.withType<Test>().configureEach {
useJUnitPlatform()
}
그러고 다음과 같이 Kotest 의존성을 추가한다:
repositories {
mavenCentral()
}
dependencies {
testImplementation("io.kotest:kotest-runner-junit5:${kotestVersion}")
// 필요한 경우 다른 모듈에 대한 종속성도 추가한다.
}
JVM/Maven
JVM/Maven 프로젝트의 경우에는 빌드 파일(pom.xml
)에 다음과 같이 구성이 필요하다.
junit 테스트를 위해 surefire 플러그인을 구성해야 한다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
그런 다음 종속성을 Kotest JUnit5 런너를 추가한다.
<dependencies>
<dependency>
<groupId>io.kotest</groupId>
<artifactId>kotest-runner-junit5</artifactId>
<version>{kotestVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
Kotlin/JS
TIP
단위 및 데이터 기반 테스트 예제와 함께 JVM, 네이티브 및 자바스크립트가 모두 구성된 작동 중인 멀티플랫폼 프로젝트는 아래 사이트에서 확인할 수 있다.
빌드에 Kotest 멀티플랫폼 Gradle 플러그인을 추가한다.
예를 들어,
plugins {
id("io.kotest.multiplatform") version "5.0.2"
}
엔진 종속성을 commonTest 종속성 블록에 추가한다:
kotlin {
targets {
js(IR) { // LEGACY or BOTH are unsupported
browser() // to compile for the web
nodejs() // to compile against node
}
}
sourceSets {
val commonTest by getting {
dependencies {
implementation("io.kotest:kotest-framework-engine:$version")
}
}
}
}
CAUTION
Kotlin/JS용 새 IR 컴파일러 백엔드만 지원된다. 레거시 컴파일러 백엔드로 JS를 컴파일하는 경우 테스트에 Kotest를 사용할 수 없다.FunSpec
, ShouldSpec
, StringSpec
을 사용하여 테스트를 작성할 수 있다. 테스트는 commonTest
또는 jsTest
소스 집합에 배치할 수 있다. gradle check
명령을 사용하여 테스트를 실행한다.
자바스크립트 테스트 엔진은 JVM 테스트 엔진과 비교할 때 기능이 제한되어 있다. 가장 큰 제한 사항은 Kotlin이 런타임에 어노테이션을 자바스크립트 코드에 노출하지 않으므로 어노테이션 기반 구성이 작동하지 않는다는 것이다.
NOTE
자바스크립트용 테스트는 테스트를 중첩할 수 없다. 이는 기본 Javascript 테스트 러너(예: Mocha 또는 Karma)가 부모 테스트에서 코루틴과 호환되지 않는 프로미스를 지원하지 않으며, Kotest에서는 모든 테스트 범위가 코루틴이기 때문이다. 그렇기 때문에 지원되는 사양이FunSpec
, ShouldSpec
, StringSpec
으로 제한된다.
INFO
IntelliJ Kotest 플러그인은 녹색 실행 아이콘을 사용하여 IDE에서 직접 일반, 네이티브 또는 JS 테스트를 실행하는 것을 지원하지 않는다. gradle을 통한 실행만 지원된다.Kotlin/Native
Kotlin/Navive 프로젝트에서도 Kotlin/JS 프로젝트와 동일하게 Kotest 멀티플랫폼 Gradle 플러그인을 추가해야 한다.
plugins {
id("io.kotest.multiplatform") version "5.0.2"
}
엔진 종속성을 commonTest
종속성 블록에 추가한다:
kotlin {
targets {
linuxX64() // can add any supported native targets such as linux, mac, windows etc
}
}
sourceSets {
val commonTest by getting {
dependencies {
implementation("io.kotest:kotest-framework-engine:$version")
}
}
}
테스트는 commonTest
또는 특정 네이티브 소스 집합에 배치할 수 있다. gradle check
명령을 사용하여 테스트를 실행한다.
네이티브 테스트 엔진은 JVM 테스트 엔진과 비교할 때 기능이 제한적이다. 가장 큰 제한 사항은 Kotlin이 런타임에 어노테이션을 네이티브 코드에 노출하지 않으므로 어노테이션 기반 구성이 작동하지 않는다는 것이다.
참고 IntelliJ Kotest 플러그인은 IDE에서 일반, 네이티브 또는 JS 테스트를 실행하는 것을 지원하지 않는다. Gradle 검사 작업을 사용해야 한다.
Android
INFO
현재 Kotest에서는 JVM 테스트만 공식적으로 지원된다.
다음 단계를 통해 일반적으로 모듈의 src/test
폴더에 있는 안드로이드 프레임워크가 필요하지 않거나 모킹이 되는 유닛 및 통합 테스트에 Kotest를 사용할 수 있다.
Android의 Kotest는 JUnit Platform gradle 플러그인을 사용한다. 이를 위해서는 빌드 파일에서 안드로이드 테스트 옵션 블록을 구성한 다음 Kotest junit5 런처 종속성을 추가해야 한다.
android.testOptions {
unitTests.all {
it.useJUnitPlatform()
}
}
dependencies {
testImplementation 'io.kotest:kotest-runner-junit5:{version}'
}
kotest 버전
여기서 ${kotestVersion}
을 사용하고자 하는 Kotest 버전을 지정한다.
2024년 4월 기준으로 kotest 최신 버전은 2024년 3월 11일에 출시된 5.8.1이다. https://central.sonatype.com/artifact/io.kotest/kotest-runner-junit5
kotest-runner-junit5와 kotest-runner-junit5-jvm의 차이점은?
Kotest 테스트를 JUnit 5 테스트 엔진으로 실행하기 위한 기본적인 러너는 jvm이 붙은 버전과 아닌 버전 2가지가 존재한다. 이 두 버전의 차이는 kotest가 어디에서 사용되는지에 따라 달라진다.
-
kotest-runner-junit5:
- 이 모듈은 Kotest 테스트 엔진과 JUnit 5를 통합하여 Kotest 테스트를 JUnit 5 테스트로 실행할 수 있게 해준다. 이 모듈은 Kotlin Multiplatform 프로젝트에 사용되며, 여러 플랫폼(예: JVM, JS, Native)에서 JUnit 5와 함께 Kotest를 실행할 수 있도록 지원한다.
-
kotest-runner-junit5-jvm:
- 이 모듈은 JVM에서 Kotlin으로 작성된 코드에 대한 JUnit 5 테스트를 실행하기 위해 사용된다. 이 모듈은 JVM 플랫폼에 특화되어 있으며, Kotest 테스트를 JUnit 5로 실행하는 데 필요한 모든 구성을 제공한다.
두 모듈은 각각의 플랫폼에 따라 Kotest 테스트를 JUnit 5 테스트로 실행할 수 있도록 지원한다. 이러한 통합은 Kotest를 다양한 환경에서 사용할 수 있도록 하며, JUnit 5와의 호환성을 보장하여 Kotest를 기존의 테스트 프레임워크와 통합할 수 있도록 한다.
IntelliJ IDEA 에서 Kotest 환경 만들기
IntelliJ IDEA에서 Kotest 구동하려면, Kotest 플러그인을 설치해야 한다.
[Setting]-[Plugins]에서 가서 kotest를 검색해서 설치한다.