uju's Tech

[kotest] Data Driven Testing (Parameterized Test) 본문

Programming/Kotlin

[kotest] Data Driven Testing (Parameterized Test)

ujusy 2022. 5. 16. 21:26

Junit의 parameterize test가 kotest에서는 data driven testing 라는 이름을 갖는다. 

 

Data Driven Testing은 테스트를 작성할 때 직접 작성한 예제를 기반으로 테스트를 할 수 있다.

앞서 포스팅했던 Property Based Testing 인 광범위한 범위의 데이터를 무작위로 테스트하는 경우와 반대되는 경우에 사용할 수 있을 것 같다.

 

명확하게 해당 인자가 들어갈 경우 에러를 발생한 다거나 무조건 성공해야하는 예제를 직접 명시하여 테스트할 때 Data Driven Testing을 잘 사용할 수 있을 것 같다.

 

Dependecy 추가

사용하는 버전은 알맞게 작성해주자.

testImplementation("io.kotest", "kotest-framework-datatest", "5.2.3")

사용 예시

 "덧셈한 결과" {
    withData(
        "2 + 3 to 5,
        "1 + 2" to 3,
    ) { (input, output) ->
        add(input) shouldBe output
    }
}

input과 output을 직접 명시하여 검증할 수 있다. 

 

 

다음과 같이 WithDataTestName 을 사용해서 테스트 제목을 커스텀하여 테스트를 진행할 수 도있다. 

"덧셈한 결과가 나와야한다." {
    withData<Test>(
        Test("2 + 3", 5),
        Test("2 + 4", 6),
    ) { (input, output) ->
        add(input) shouldBe output
    }
}

data class Test(val input: String, val output: Int) : WithDataTestName {
    override fun dataTestName() = "test: $a"
}

결과는 다음과 같이 나온다.

 

무작위 값 혹은 넓은 범위의 데이터 넣어 테스트를 하고싶다면 Kotest property based testing을 살펴보도록하자. ㅎㅎ

https://uju-tech.tistory.com/entry/kotest-Property-based-Testing

 

[kotest] Property-based Testing

이번에 next step (https://edu.nextstep.camp/) 에서 이펙티브 코틀린~을 수강하게 되면서 kotest 로 테스트를 작성해보게 되었다. 강의가 Junit5 을 기본으로 설명하고있어서 kotest와 Junit5 중 어떤 프레임워..

uju-tech.tistory.com

 

참고

https://kotest.io/docs/framework/datatesting/custom-test-names.html

 

Data Test Names | Kotest

By default, the name of each test is simply the toString() on the input row.

kotest.io

 

Comments