Hamcrest는 Java와 Kotlin을 지원하는 유연하고 읽기 쉬운 매처 라이브러리입니다. 매처는 테스트 코드에서 객체의 동작을 검증하는 데 사용됩니다. Hamcrest의 매처는 assertThat
와 함께 사용되어 객체의 속성을 검사하여 테스트의 결과를 판단합니다.
하지만 때로는 단일 매처만으로는 원하는 검증을 수행하기 어려운 경우가 있을 수 있습니다. 이럴 때 Hamcrest의 멀티 매처를 활용하면 여러 개의 조건을 조합하여 원하는 검증을 수행할 수 있습니다. 멀티 매처는 allOf
, anyOf
및 not
등의 조합 매처로 구성됩니다.
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 공식 문서를 참조하세요.