Android

[Android Studio] Kotest란? Kotest 기본 세팅

Yenya 2023. 11. 18. 14:45

Android 프로젝트를 학교 과제로 하나 시작하게 되어, Kotest 기본 세팅 과정에 대해 글을 작성해보고자 합니다.

 

 

Kotest란?

 

Kotest는 Kotlin 기반의 테스트 프레임워크로, 주로 Kotlin 프로젝트에서 사용됩니다. 이 프레임워크는 간결한 문법과 다양한 기능을 제공하여 손쉽게 테스트 코드를 작성하고 실행할 수 있도록 도와줍니다. 또한 JUnit과 통합되어 JUnit 플랫폼을 사용할 수 있어, JUnit 기반의 프로젝트에서도 간단하게 도입할 수 있습니다.

 

Kotest는 코루틴(Coroutine)도 지원합니다. 코루틴은 Kotlin에서 비동기 코드를 효과적으로 다룰 수 있는 기능 중 하나입니다. Kotest를 사용하면 비동기 코드에 대한 테스트도 간편하게 작성할 수 있습니다.

 

코루틴을 사용하면 일반적인 콜백이나 프로미스보다 가독성이 뛰어나며, 코드를 더 쉽게 이해하고 유지보수할 수 있습니다. Kotest는 이러한 코루틴의 이점을 활용하여 비동기 코드의 테스트를 편리하게 작성할 수 있도록 지원하고 있습니다.

 

 

왜 Kotest를 사용하냐? JUnit은?

사실 Kotest를 사용하냐, JUnit을 사용하냐에 대해서는 말이 많지만, 보통

 

1.  팀원들이 어느 문법에 더 익숙한지

2. Kotlin 기반의 프로젝트인지

3. 코루틴을 사용할 예정이 있는지

 

여부에 따라서 결정하는 것 같습니다.

 

 

저희 팀은 Kotlin 기반의 안드로이드 프로젝트이며, 코루틴을 사용할 예정이었기 때문에 Kotest를 사용하였습니다.

 

 

Kotest 세팅 과정

 

먼저 Kotest의 Kotest test framework를 세팅해봅시다. Kotest 공식 홈페이지에 Quick Start로 가이드 되어 있지만, 안드로이드 스튜디오 기준의 세팅 과정을 정리해보겠습니다.

 

	// build.gradle(:app)
	android {
    
		// 일부 생략
	    testOptions {
	        unitTests.all {
	            useJUnitPlatform()
	        }
	    }
	}

 

 

안드로이드의 Kotest는 JUnit Platform Gradle 플러그인을 사용합니다. 앱 모듈의 build.gradle 파일에서 JUnit Platform Gradle 플러그인을 활성화하기 위해 testOptions에 필요한 설정을 추가해야 합니다.

 

	// build.gradle(:app)
	dependencies {
    
		// 일부 생략
		testImplementation("io.kotest:kotest-runner-junit5:4.3.2")
	}

 

동일한 파일에서 Kotest junit5 runner 의존성도 추가하였습니다.

 

 

이후 [Settings] -> [Plugins] -> [Marketplace] 에서 Kotest plugin도 설치하면 편리하게 테스트할 수 있습니다.

 

 

설정을 완료한 후, 테스트를 실행하자 에러가 발생하였습니다. 역시 개발이 이렇죠 ㅎ

 

Caused by: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses

 

위 에러는 Kotlin Class를 Reflect할 수 없어 발생하는 에러입니다.

 

Kotlin Reflection은 실행 중에 코드의 구조를 조사하고 조작할 수 있는 기능을 제공하는 기능 중 하나입니다. Reflection은 일반적으로 프로그램이 실행 중에 자신의 구조를 조사하거나 수정해야 하는 경우에 사용됩니다. Kotlin Reflection을 사용하면 클래스의 메타데이터에 접근하고, 속성이나 메서드를 동적으로 호출하거나 수정할 수 있습니다.

 

	// build.gradle(:app)
	dependencies {
    
		// 일부 생략
		implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.20")
	}

 

kotlin-reflect의 의존성을 추가하니 에러가 해결되었습니다.

 

 

test 코드 작성

 

 테스트 코드(단위 테스트)는 상단 이미지처럼 반드시 "src/test/java/"에 위치해야 합니다. 

 

 

import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe

class CalcTest : StringSpec({
    "test" {
        1 + 1 shouldBe 2
    }
})

 

ExampleUnitTest.kt 파일에서 간단한 테스트를 작성하였습니다.

 

 

왼쪽의 Kotest plugin에서 실행하고자 하는 테스트 왼쪽의 Run 버튼을 활용해서 테스트를 실행할 수 있습니다.

왼쪽 상단의 Run 버튼을 통해서는 전체 테스트를 실행할 수 있습니다.

 

 

테스트가 문제없이 잘 실행된 것을 확인할 수 있습니다.

'Android' 카테고리의 다른 글

[Android Studio] macOS 에서 Emulator 키보드 입력하기  (0) 2023.08.18