달력

12

« 2025/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Backend'에 해당되는 글 1

  1. 2025.10.25 kotlin.test.Test vs jupiter.api.Test
2025. 10. 25. 23:44

kotlin.test.Test vs jupiter.api.Test Backend/Spring, ETC2025. 10. 25. 23:44

Intro

: 어느 날 Unit Test를 작성하던 중에, 사용하고 있던 Test Annotation에 궁금증이 생겼습니다. kotlin.test.Testorg.junit.jupiter.api.Test 모두 @Test Annotation을 제공하는데 각각 어떤 차이가 있는 것일까요? 그리고 둘중 하나를 선택해서 쓰는 이유는 무엇일까요? 내가 사용하는 기술 셋에 대해, 사용 목적조차 모르고 있었다는 것에 반성하며 정리해 보았습니다.

 

kotlin.test.Test

: kotlin.test.Test는 kotlin의 표준 Test annotation이고, 언어 차원에서 제공하며 특정 Framework/Platform에 의존적이지 않은 Test Annotation입니다(kotlin 표준 library에 포함돼 있음 - kotlin.test package).

 

이 annotation이 붙은 test 실행은 Platform에 따라 차이가 있어요.

  • JVM에서는 JUnit으로 Mapping되어 실행됨.
  • Kotlin Native에서는 kotlin/native test runner로 Mapping되어 실행됨.

 

저의 경우는 JVM에서 돌아가는 app을 개발하고 있었으니, kotlin.test.Test annotation을 붙이더라도 JUnit test와 별반 차이가 없었습니다. 다만 JUnit의 기능인 @BeforeEach 같은 것은 지원하지 않는다고 하네요.

 

org.junit.jupiter.api.Test

: JUnit에서 제공하는 Test annotation입니다. annotation 자체에는 별 속성같은 것도 없지만, JUnit에서 annotation을 인식하여 test를 실행합니다.

 

※ kotlin.test.Test annotation과 JUnit의 기능을 같이 쓰면...?

: 만약에 @Test annotation에 대한 의존성을 잘못 추가하여, kotlin.test.Test annotation과 JUnit의 기능을 함께 사용하도록 test code를 작성하면 어떻게 될까요(예를들면 아래와 같은 code)?

import org.junit.jupiter.api.BeforeEach
import kotlin.test.Test

class AddUseCaseTestMultipleCase {
    lateinit var addUseCase: AddUseCase

    @BeforeEach
    fun setUp() {
        addUseCase = AddUseCase()
    }

    @Test
    fun 1 + 2 = 3() {
        val result = addUseCase.add(1, 2)
        assertEquals(result, 3)
    }

    @Test
    fun -1 + 2 = 1() {
        val result = addUseCase.add(-1, 2)
        assertEquals(result, 1)
    }
}

 

다행히도 문제없이 @BeforeEach annotation이 개별 test가 실행되기 전에 실행됩니다.

 

kotlin.test.Test는 어떤 Framework/Platform에서도 실행될 수 있도록, 다른 Test framework로 Mapping됩니다(JVM 환경이라면, kotlin.test.Test -> org.junit.jupiter.api.Test로 Mapping). 그래서 각 @Test는 JUnit의 Test annotation과 동일하게 처리되고, @BeforeEach도 개별 test가 실행되기 전에 호출됩니다.

 

Conclusion

: 당장은 kotlin.test.Test annotation을 사용하더라도 문제가 되지 않을 수 있지만, 지금 문제없이 동작한다고 다가 아닌 것 같아요. 제가 의도한대로 code를 작성했느냐가 중요하다고 생각합니다. 그런 관점에서 kotlin.test.Test를 사용하는 것은 제가 의도한 바가 아니고, 그걸 확인하는 과정에서 JUnit의 Test Annotation과 비교해본 것은 의미가 있었던 것 같습니다.

:
Posted by syjdev