[kotlin] Hamcrest의 확장 매처

우리는 테스트하는 동안 객체의 상태와 동작을 검증하기 위해 매처(matcher)를 사용합니다. Hamcrest는 테스트 코드를 작성할 때 매우 유용한 라이브러리 중 하나입니다. 하지만 때로는 Hamcrest의 기본 매처만으로는 충분하지 않을 수 있습니다. 그럴 때는 Hamcrest의 확장 매처를 활용할 수 있습니다.

확장 매처를 작성하는 방법은 매우 간단합니다. Kotlin을 사용하는 경우, 다음과 같이 확장 함수를 작성할 수 있습니다.

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

fun <T> isDivisibleBy(divisor: Int): TypeSafeMatcher<T> {
    return object : TypeSafeMatcher<T>() {
        override fun matchesSafely(item: T): Boolean {
            // item을 divisor로 나눈 나머지가 0인지 확인
        }

        override fun describeTo(description: Description) {
            description.appendText("나누어 떨어져야 함")
        }

        override fun describeMismatchSafely(item: T, mismatchDescription: Description) {
            mismatchDescription.appendValue(item).appendText(" 나누기 ").appendValue(divisor)
        }
    }
}

위 코드에서 확장 함수 isDivisibleByTypeSafeMatcher를 반환합니다. 이를 사용하면 우리는 isDivisibleBy 매처를 활용하여 객체가 특정 숫자로 나누어지는지 손쉽게 검증할 수 있습니다.

이제 확장 매처를 사용하여 테스트 코드를 작성할 수 있습니다.

import org.hamcrest.MatcherAssert.assertThat

val number = 10
assertThat(number, isDivisibleBy(5))

위의 코드를 실행하면 number가 5로 나누어 떨어지는지 확인하는 테스트를 생성할 수 있습니다.

이처럼 확장 매처를 작성하고 활용함으로써 우리는 테스트 코드를 보다 읽기 쉽고 유지보수하기 쉽게 만들 수 있습니다. Hamcrest 라이브러리의 다양한 기능을 이용하여 더 많은 확장 매처를 작성하고 테스트 코드를 더욱 효과적으로 작성할 수 있습니다.

참고 자료

이제 Hamcrest 라이브러리의 확장 매처를 작성하여 테스트 코드를 보다 유연하게 작성해보세요!