[kotlin] Hamcrest의 커스텀 매처 작성

Hamcrest는 다양한 종류의 매처를 제공하여 객체의 속성을 테스트하는 데 도움을 줍니다. 그러나 때때로 기본 제공 매처로는 특정한 테스트를 수행하기에는 부족할 수 있습니다. 이럴 때, Hamcrest의 커스텀 매처를 작성하면 원하는 테스트를 수행하는 데 도움이 됩니다.

Hamcrest 커스텀 매처란?

Hamcrest의 커스텀 매처를 작성하면, 특정 객체의 속성을 테스트하는 데 사용할 수 있는 새로운 매처를 만들 수 있습니다. 이를 통해 이미 제공되는 매처로는 수행하기 어려운 테스트를 더 쉽게 작성할 수 있게 됩니다.

커스텀 매처 작성하기

다음은 Hamcrest에서 커스텀 매처를 작성하는 간단한 예제입니다.

import org.hamcrest.Description
import org.hamcrest.TypeSafeMatcher

class IsDivisibleBy(private val divisor: Int) : TypeSafeMatcher<Int>() {
    override fun matchesSafely(item: Int): Boolean {
        return item % divisor == 0
    }

    override fun describeTo(description: Description) {
        description.appendText("divisible by $divisor")
    }
}

fun divisibleBy(divisor: Int) = IsDivisibleBy(divisor)

이 예제에서 IsDivisibleBy 매처는 숫자가 지정된 숫자로 나누어떨어지는지 테스트합니다. 또한 divisibleBy 함수를 통해 이 매처를 사용할 수 있도록 만듭니다.

커스텀 매처 사용하기

커스텀 매처를 사용하는 예제를 살펴보겠습니다.

import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers
import org.junit.jupiter.api.Test

class CustomMatcherExampleTest {

    @Test
    fun testIsDivisibleBy() {
        val number = 10
        assertThat(number, divisibleBy(5))
    }
}

위 예제에서 divisibleBy(5) 매처를 사용하여 number가 5로 나누어떨어지는지 테스트합니다.

결론

Hamcrest의 커스텀 매처를 작성하고 사용함으로써, 더욱 읽기 쉬운, 유지보수가 쉬운 테스트 코드를 작성할 수 있습니다. 커스텀 매처를 통해 특정한 테스트 시나리오에 맞게 맞춤형 매처를 만들어 사용할 수 있습니다.

더 많은 정보는 Hamcrest 공식 문서에서 찾아볼 수 있습니다.