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
- Standard
- Assertions
- assumptions
- meta
- disabled
- displayname
- timeout
- order
- repeat
- test_info
- test_interface
- parameterized
- conditional
- extension_model
- dynamic_test
- parallel
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)
}