Octoping의 블로그

JUnit에는 Parameterized Test라는 것이 있다.

이걸로 같은 테스트에 대해 여러 개의 input으로 테스트를 진행할 수 있다.

 

Kotest에서는 어떻게 할까?

 

https://kotest.io/docs/framework/datatesting/data-driven-testing.html

 

Introduction | Kotest

Before data-driven-testing can be used, you need to add the module kotest-framework-datatest to your build.

kotest.io

Data Driven Testing 이라는 이름으로 제공하고 있다.

 

<kotlin />
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를 할 수 있는 방법이 있다!

 

<kotlin />
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를 사용하면 깔끔해진다

profile

Octoping의 블로그

@Octoping

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!