[kotlin] Hamcrest의 오브젝트 매처

Hamcrest는 Java와 Kotlin에서 사용할 수 있는 유용한 라이브러리입니다. 이 라이브러리를 사용하면 코드를 더 읽기 쉽게 만들 수 있고 유지보수하기 편리합니다. 오브젝트 매처(Object Matcher)는 특히 테스트 코드에서 많이 사용되는데, 이번 글에서는 Kotlin에서 Hamcrest의 오브젝트 매처를 사용하는 방법에 대해 알아보겠습니다.

Hamcrest 라이브러리 추가

먼저, 프로젝트의 build.gradle.kts 또는 build.gradle 파일에 다음과 같이 Hamcrest 라이브러리를 추가합니다.

dependencies {
    testImplementation("org.hamcrest:hamcrest:2.2")
}

Hamcrest 오브젝트 매처 사용

다음은 Hamcrest의 오브젝트 매처를 사용하여 리스트의 크기를 확인하는 예제입니다.

import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.hasSize

fun main() {
    val list = listOf(1, 2, 3, 4, 5)
    assertThat(list, hasSize(5))
}

위의 예제에서 hasSize(5)는 리스트의 크기가 5인지를 확인하는 매처입니다. 만약 크기가 5가 아니라면 AssertionError가 발생하여 테스트가 실패됩니다.

커스텀 매처 작성

Hamcrest를 사용하다 보면 기본적으로 제공되는 매처만으로는 모든 경우를 커버할 수 없는 경우가 있습니다. 이럴 때는 직접 매처를 작성하여 사용할 수 있습니다.

import org.hamcrest.BaseMatcher
import org.hamcrest.Description
import org.hamcrest.Matcher
import java.util.*

fun <T> isOdd(): Matcher<T> {
    return object : BaseMatcher<T>() {
        override fun describeTo(description: Description) {
            description.appendText("is odd")
        }

        override fun matches(item: Any): Boolean {
            return when (item) {
                is Int -> item % 2 != 0
                is Long -> item % 2 != 0L
                else -> throw UnsupportedOperationException("Only supports Int and Long")
            }
        }
    }
}

fun main() {
    assertThat(3, isOdd())
    assertThat(4, isOdd())
}

위의 예제에서 isOdd() 함수는 홀수인지를 확인하는 커스텀 매처를 작성한 것입니다.

Hamcrest를 사용하면 테스트 코드를 더 읽기 쉽게 만들고 유지보수하기 쉽게 할 수 있습니다. Hamcrest를 통해 읽기 쉬운 테스트 코드를 작성해보세요!

더 많은 정보는 Hamcrest 공식 웹사이트에서 확인할 수 있습니다.

이상으로 Hamcrest의 오브젝트 매처에 대한 글을 마치도록 하겠습니다. 감사합니다.