Hamcrest Collections Matcher

By JS | Last updated: May 22, 2021

List 등의 Collections이 갖고 있는 데이터를 확인하는 Matcher들을 소개합니다.

프로젝트 의존성 설정

Gradle 프로젝트는 build.gradle에서 아래와 같이 java-hamcrest를 추가합니다.

dependencies {
    testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
}

hasItem()

hasItem은 Collections가 어떤 아이템을 갖고 있는지 확인하는 Matcher입니다.

다음과 같이 리스트가 어떤 값을 갖고 있는지 확인할 때 사용할 수 있습니다.

@Test
public void testCollectionHasItem() {
    List<String> list = Arrays.asList("a", "b", "c");

    assertThat(list, hasItem("a"));
    assertThat(list, not(hasItem("d")));
}

hasItems()

1개가 아닌 다수의 아이템을 함께 확인할 때, hasItems를 사용할 수 있습니다. hasItems의 인자로 전달되는 순서는 중요하지 않습니다. 전달된 아이템이 리스트에 모두 있다면, Matcher는 true를 리턴합니다.

@Test
public void testCollectionHasItems() {
    List<String> list = Arrays.asList("a", "b", "c");

    assertThat(list, hasItems("c", "a"));
    assertThat(list, hasItems("a", "b", "c"));
}

containsInAnyOrder()

containsInAnyOrder는 hasItems와 동일하게, 리스트가 갖고 있는 다수의 아이템을 확인할 때 사용되는 Matcher입니다.

@Test
public void testArrayContainsInAnyOrder() {
    List<String> list = Arrays.asList("a", "b", "c");

    assertThat(list, containsInAnyOrder("c", "b", "a"));
}

contains()

만약 리스트에 저장되는 아이템의 순서도 비교해야 한다면, contains()를 사용할 수 있습니다. 순서가 다를 때 contains는 false를 리턴합니다.

@Test
public void testCollectionContains() {
    List<String> list = Arrays.asList("a", "b", "c");

    assertThat(list, contains("a", "b", "c"));
    assertThat(list, not(contains("c", "b", "a")));
}

empty()

List, Set 등의 Collections이 비어있는지 확인할 때 empty()를 사용할 수 있습니다.

List<String> list = Collections.emptyList();
assertThat(list, empty());

Set<String> set = new HashSet<>();
assertThat(set, empty());

Map의 경우에는, 다음과 같이 empty를 확인할 수 있습니다.

Map<String, String> map = new HashMap();
assertThat(map, anEmptyMap());
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha