wnsgml972 / kotlin-junit5-example

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JUnit5 Tutorial

Requirements

  • jvm >= 1.8

Architecture

  • Platform
    • 테스트를 실행해주는 런처 제공. TestEngine API 제공.
    • Maven / Gradle Plugins, JUnit4 Runner
  • Jupiter
    • JUnit 5를 지원하는 TestEngine API 구현체
  • Vintage
    • JUnit 4와 3을 지원하는 TestEngine API 구현체

Index

Best Practices

TL;DR

build.gradle.kts

  • 많은 내용이 build.gradle.kts에 포함되어 있습니다.
  • 주의 깊게 읽는 것이 좋습니다.

Test Container 사용

쓰는 게 문제가 아니라, 마이그레이션이 문제 될 수 있음.

  • In Memory Database나, 실제 DB 말고 컨테이너 DB를 쓰는 것이 좋다.

모든 테스트 클래스의 수명주기 기본값 변경

  • 성능을 위해 사용
@TestInstance(TestInstance.Lifecycle.PER_CLASS) // A new test instance will be created once per test class.

백틱 및 @Nested내부 클래스 사용

  • ``: 공백을 포함한 가독성 있는 메소드 이름 사용 가능
  • @Nested 를 사용해 테스트 방법을 그룹화 할 수 있다.
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class DesignControllerTest {
    @Nested
    inner class GetDesigns {
        @Test
        fun `all fields are included`() {}
        @Test
        fun `limit parameter`() {}
        @Test
        fun `filter parameter`() {}
    }
    @Nested
    inner class DeleteDesign {
        @Test
        fun `design is removed from db`() {}
        @Test
        fun `return 404 on invalid id parameter`() {}
        @Test
        fun `return 401 if not authorized`() {}
    }
}

모의 처리

  • kotlin에서는 기존 mockito에 버그 이슈가 있다고 함, MockK 사용
val clientMock: UserClient = mockk()
val user = User(id = 1, name = "Ben")
every { clientMock.getUser(any()) } returns user
val daoMock: UserDAO = mockk(relaxed = true)

val scheduler = UserScheduler(clientMock, daoMock)
scheduler.start(1)

verifySequence {
    clientMock.getUser(1)
    daoMock.saveUser(user)
}

JUnit5 Testing in IDE

Reference

About


Languages

Language:Kotlin 100.0%