라이브러리 프레임워크
Kotest Parameterized Test 하는 법
Octoping
2024. 4. 11. 21:37
JUnit에는 Parameterized Test라는 것이 있다.
이걸로 같은 테스트에 대해 여러 개의 input으로 테스트를 진행할 수 있다.
Kotest에서는 어떻게 할까?
https://kotest.io/docs/framework/datatesting/data-driven-testing.html
Data Driven Testing 이라는 이름으로 제공하고 있다.
internal class EmailInfoTest : BehaviorSpec({
Given("이메일 형식이 올바르지 않을 경우") {
When("EmailInfo를 생성하면") {
withData(
nameFn = { "예외가 발생한다 ($it)" },
"@kw.ac.kr",
" @kw.ac.kr",
"@@kw.ac.kr",
"%^%^@kw.ac.kr",
"a$%b123@kw.ac.kr",
"duo@kw.ac.kr@kw.ac.kr",
) { invalidEmail ->
val exception = shouldThrow<IllegalArgumentException> {
EmailInfo(invalidEmail)
}
exception.message shouldBe "이메일 형식이 올바르지 않습니다."
}
}
}
})
다음과 같이, withData
키워드를 이용해서 사용할 수 있다.
하지만, 이걸 위해서는 어쩔 수 없이 kotest-framework-datatest
라이브러리를 import 해와야 한다.
테스트를 위해 이렇게 라이브러리가 늘어나는 것은 뭔가 귀찮다.
하지만 코틀린에서 제공하는 기본 문법을 이용해서 간단히 Parameterized Test를 할 수 있는 방법이 있다!
internal class EmailInfoTest : BehaviorSpec({
Given("이메일 형식이 올바르지 않을 경우") {
val invalidEmails = arrayOf(
"@kw.ac.kr",
" @kw.ac.kr",
"@@kw.ac.kr",
"%^%^@kw.ac.kr",
"a$%b123@kw.ac.kr",
"duo@kw.ac.kr@kw.ac.kr",
)
When("EmailInfo를 생성하면") {
invalidEmails.forEach {
Then("예외가 발생한다 $it") {
val exception = shouldThrow<IllegalArgumentException> {
EmailInfo(it)
}
exception.message shouldBe "이메일 형식이 올바르지 않습니다."
}
}
}
}
})
이렇게 forEach를 사용하면 깔끔해진다