2022-07-05 @이영훈
JUnit5 (또는 AssertionJ)에서 Exception을 테스트하는 방법을 기록으로 남깁니다.
JUnit5로 테스트하는 방법과 AssertJ로 테스트하는 방법이 있습니다.
저는 JUnit5보다 AssertJ 라이브러리를 이용해서 Exception 테스트를 많이 합니다.
•
assertThatThrownBy 라는 함수명이 직관적이고
•
테스트할 내용을 chaining 방식으로 표현할 수 있어 가독성이 좋습니다.
아래 두 방법을 직접 비교하면서 보고 편하신 것을 사용하면 될 거 같습니다.
AssertionJ의 assertThatThrownBy
[예시1]
import org.assertj.core.api.Assertions.assertThatThrownBy
import org.junit.jupiter.api.Test
@Test
fun `test exception1 - AssertionJ`() {
assertThatThrownBy {
// lambda 부분입니다. 실행할 코드를 작성합니다.
val list = listOf(1, 2, 3, 4)
list.get(100)
}
.isExactlyInstanceOf(ArrayIndexOutOfBoundsException::class.java)
.isInstanceOf(Exception::class.java) // 부모 클래스 타입도 체크할 수 있습니다.
.hasMessage("Index 100 out of bounds for length 4")
}
Kotlin
복사
[예시2]
@Test
fun `test exception2 - AssertionJ`() {
assertThatThrownBy { throw RuntimeException("Occurred run time exception") }
.isExactlyInstanceOf(RuntimeException::class.java)
.isInstanceOf(Exception::class.java) // 부모 클래스 타입도 체크할 수 있습니다.
.hasMessage("Occurred run time exception")
}
Kotlin
복사
JUnit5의 assertThrows
[예시1]
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.assertThrows
@Test
fun `test exception1 - JUnit5`() {
val assertion = assertThrows<ArrayIndexOutOfBoundsException> {
// lambda 부분입니다. 실행할 코드를 작성합니다.
val list = listOf(1, 2, 3, 4)
list.get(100)
}
assertEquals("Index 100 out of bounds for length 4", assertion.message)
}
Kotlin
복사
[예시2]
@Test
fun `test exception2 - JUnit5`() {
val assertion = assertThrows<RuntimeException> { throw RuntimeException("Occurred run time exception") }
assertEquals("Occurred run time exception", assertion.message)
}
Kotlin
복사