[kotlin] Hamcrest의 멀티 매처

Hamcrest는 Java와 Kotlin을 지원하는 유연하고 읽기 쉬운 매처 라이브러리입니다. 매처는 테스트 코드에서 객체의 동작을 검증하는 데 사용됩니다. Hamcrest의 매처는 assertThat와 함께 사용되어 객체의 속성을 검사하여 테스트의 결과를 판단합니다.

하지만 때로는 단일 매처만으로는 원하는 검증을 수행하기 어려운 경우가 있을 수 있습니다. 이럴 때 Hamcrest의 멀티 매처를 활용하면 여러 개의 조건을 조합하여 원하는 검증을 수행할 수 있습니다. 멀티 매처는 allOf, anyOfnot 등의 조합 매처로 구성됩니다.

allOf 매처

allOf 매처는 모든 조건을 만족해야 테스트가 통과됩니다. 예를 들어, 다음과 같은 Kotlin 코드로 allOf 매처를 사용할 수 있습니다.

import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.equalTo
import org.hamcrest.Matchers.hasItem

val numberList = listOf(1, 2, 3, 4, 5)
assertThat(numberList, allOf(hasItem(3), hasItem(4), equalTo(listOf(1, 2, 3, 4, 5))))

위 코드는 numberList에 값 3과 4가 포함되어 있고, 리스트 전체가 [1, 2, 3, 4, 5]와 같아야만 테스트가 통과합니다.

anyOf 매처

anyOf 매처는 하나 이상의 조건을 만족하면 테스트가 통과됩니다. 다음은 anyOf 매처를 사용한 예제입니다.

import org.hamcrest.Matchers.anyOf
import org.hamcrest.Matchers.containsString

val message = "Hello, World!"
assertThat(message, anyOf(containsString("Hello"), containsString("Hi")))

위 코드는 message가 “Hello”를 포함하거나 “Hi”를 포함하면 테스트를 통과합니다.

not 매처

not 매처는 주어진 매처와 반대되는 조건을 만족할 때 테스트가 통과합니다. 다음은 not 매처를 사용한 예제입니다.

import org.hamcrest.CoreMatchers.not

val result = 10
assertThat(result, not(equalTo(5)))

위 코드는 result가 5와 같지 않을 때 테스트를 통과합니다.

Hamcrest의 멀티 매처를 사용하면 여러 가지 조건을 조합하여 유연하고 강력한 테스트 코드를 작성할 수 있습니다.

더 많은 정보는 Hamcrest 공식 문서를 참조하세요.