[kotlin] Hamcrest의 테스트 코드 유지보수

Hamcrest는 테스트 코드 작성을 도와주는 유용한 도구이지만, 그 효과를 극대화하기 위해 코드의 가독성과 유지보수성을 고려해야 합니다. 특히 Kotlin에서 Hamcrest를 사용할 때, 몇 가지 유의할 점이 있습니다.

1. Matcher 재사용

Hamcrest Matcher를 재사용하여 중복을 제거하고 가독성을 향상시킬 수 있습니다. 예를 들어, 동일한 Matcher를 여러 테스트에서 사용할 경우, 해당 Matcher를 별도의 메서드로 추출하여 중복을 제거할 수 있습니다.

private fun hasName(expectedName: String): Matcher<User> {
    return object : TypeSafeMatcher<User>() {
        override fun describeTo(description: Description?) {
            description?.appendText("user with name ").appendValue(expectedName)
        }

        override fun matchesSafely(item: User?): Boolean {
            return item?.name == expectedName
        }
    }
}

위의 예에서 hasName 메서드는 사용자의 이름을 검사하는 Matcher를 생성하여, 여러 곳에서 재사용할 수 있게 해줍니다.

2. Custom Matcher 작성

프로젝트 특정 도메인에 맞는 Custom Matcher를 작성하여 가독성을 향상시킬 수 있습니다. 이는 특히 도메인 객체에 대한 테스트 코드 작성 시 유용합니다.

class BookMatcher {
    companion object {
        fun hasTitle(expectedTitle: String): Matcher<Book> {
            return object : TypeSafeMatcher<Book>() {
                override fun describeTo(description: Description?) {
                    description?.appendText("book with title ").appendValue(expectedTitle)
                }

                override fun matchesSafely(item: Book?): Boolean {
                    return item?.title == expectedTitle
                }
            }
        }
    }
}

위와 같이 BookMatcher를 작성하여 Book 객체에 대한 Matcher를 사용하면, 테스트 코드의 가독성과 유지보수성이 향상됩니다.

3. 정확한 비교

Hamcrest를 사용할 때는 정확한 비교를 위해 적절한 Matcher를 선택하는 것이 중요합니다. 예를 들어, 숫자 비교 시 equalTo 대신 closeTo를 사용하여 특정 범위 내의 값인지 확인할 수 있습니다.

결론

Hamcrest를 사용하여 Kotlin 테스트 코드를 작성할 때, Matcher의 재사용, Custom Matcher 작성, 그리고 정확한 비교를 고려하여 코드의 가독성과 유지보수성을 높일 수 있습니다.

참고 문헌:


이 예시는 Kotlin에서 Hamcrest를 사용한 테스트 코드 유지보수에 관한 것입니다.