Hamcrest equalTo() Matcher

By JS | Last updated: May 22, 2021

Hamcrest의 equalTo Matcher를 소개합니다.

equalTo는 문자열이 같은지 확인하거나, Array 또는 List 등의 Collection 구성요소가 같은지 확인하는 Matcher입니다.

프로젝트 의존성 설정

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

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

String

String 객체가 같은지 다음과 같이 테스트할 수 있습니다.

@Test
public void testStringsEquals() {
    String str1 = "equals";
    String str2 = "equals";

    assertThat(str1, equalTo(str2));
}

대소문자를 구분하기 때문에, 다음 테스트에서 두 문자열의 알파벳은 같지만 같은 객체가 아니라고 계산됩니다.

@Test
public void testStringsEquals2() {
    String str1 = "equals";
    String str2 = "EQUALS";

    assertThat(str1, not(equalTo(str2)));
}

Array

배열 객체의 비교는 다음과 같이 테스트할 수 있습니다.

@Test
public void testArrayEquals() {
    String[] arr1 = new String[] {"a", "b", "c"};
    String[] arr2 = new String[] {"a", "b", "c"};

    assertThat(arr1, equalTo(arr2));
}

배열에 저장된 데이터 위치(Index)도 비교하기 때문에, 다음 테스트에서 두개의 객체는 같지 않다고 판단됩니다.

@Test
public void testArrayEquals2() {
    String[] arr1 = new String[] {"a", "b", "c"};
    String[] arr2 = new String[] {"c", "b", "a"};

    assertThat(arr1, not(equalTo(arr2)));
}

List

List도 배열과 동일합니다. 저장된 데이터의 Index를 구분하여 비교 합니다.

@Test
public void testListEquals() {
    List<String> list1 = Arrays.asList("a", "b");
    List<String> list2 = Arrays.asList("a", "b");

    assertThat(list1, equalTo(list2));
}

따라서, 다음 테스트에서 두개의 객체는 다르다고 판단됩니다.

@Test
public void testListEquals2() {
    List<String> list1 = Arrays.asList("a", "b");
    List<String> list2 = Arrays.asList("b", "a");

    assertThat(list1, not(equalTo(list2)));
}

Set

Set는 데이터의 순서가 없는 Collection입니다. 따라서, 아래 테스트의 두 객체는 동일하다고 계산됩니다.

@Test
public void testSetEquals() {
    Set<String> set1 = new HashSet<>(Arrays.asList("a", "b"));
    Set<String> set2 = new HashSet<>(Arrays.asList("b", "a"));

    assertThat(set1, equalTo(set2));
}

아래와 같이 객체의 구성요소가 다른 경우 같지 않다고 계산됩니다.

@Test
public void testSetEquals2() {
    Set<String> set1 = new HashSet<>(Arrays.asList("a", "b"));
    Set<String> set2 = new HashSet<>(Arrays.asList("b"));

    assertThat(set1, not(equalTo(set2)));
}

Map

Map도 순서가 없는 Collection입니다. 아래 테스트의 두 객체는 같다고 판단됩니다.

@Test
public void testMapEquals() {
    Map<String, Object> map1 = Map.of(
            "a", "123",
            "b", "456"
    );
    Map<String, Object> map2 = Map.of(
            "b", "456",
            "a", "123"
    );

    assertThat(map1, equalTo(map2));
}
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha