assertEqual과 assertThat

이건·2024년 9월 11일

assertEquals

assertEquals는 JUnit에서 제공하는 기본적인 단위 테스트 메서드 중 하나로, 두 값이 같은지를 비교하는 데 사용된다. 이 메서드는 주로 테스트에서 예상 결과와 실제 결과를 비교할 때 사용된다.

주요 특징

  1. 기본 사용법:

    • assertEquals(expected, actual) 형태로 사용된다. 여기서 expected는 예상하는 값이고, actual은 실제 테스트 결과다.
    • 두 값이 같지 않으면 테스트가 실패한다.
  2. 다양한 데이터 타입 지원:

    • assertEquals는 기본 데이터 타입(int, float 등)과 객체 타입(String, List 등) 모두를 비교할 수 있다.
    • 객체를 비교할 때는 equals() 메서드를 사용하여 비교한다.
  3. 오류 메시지:

    • 세 번째 인자로 오류 메시지를 추가할 수 있어, 테스트가 실패할 경우 어떤 문제가 있었는지 쉽게 파악할 수 있다.
    assertEquals("메시지", expected, actual);

예시

import static org.junit.Assert.assertEquals;

public class ExampleTest {
    @Test
    public void testAddition() {
        int expected = 5;
        int actual = 2 + 3;

        // 값 비교
        assertEquals(expected, actual);
    }

    @Test
    public void testStringComparison() {
        String expected = "Hello";
        String actual = "Hello";

        // 문자열 비교
        assertEquals(expected, actual);
    }
}

assertEquals는 간단하고 직관적인 방식으로 두 값을 비교할 수 있는 메서드로, 단위 테스트에서 가장 많이 사용되는 검증 메서드 중 하나다. 그러나 가독성이나 복잡한 조건 검증이 필요한 경우에는 assertThat과 같은 다른 메서드를 사용하는 것이 좋다.


assertThat

assertThat은 주로 JUnit과 Hamcrest 라이브러리에서 사용하는 검증 메서드로, 테스트의 가독성을 높이고 더 유연한 조건 검증을 가능하게 한다. 이 메서드는 "어떤 값이 특정 조건을 만족하는가?"라는 질문을 던지는 형식으로 사용된다.

주요 특징

  1. 가독성:

    • assertThat은 자연어에 가까운 형식으로 작성할 수 있어, 테스트 코드의 가독성을 높인다.
    • 예를 들어, assertThat(actual, is(expected))와 같은 구문은 "actual이 expected와 같다"는 의미를 명확히 전달한다.
  2. 매처(Matcher):

    • assertThat은 다양한 매처를 사용할 수 있어, 여러 조건을 검증하는 데 유용하다.
    • 예를 들어, is, not, greaterThan, lessThan, containsString 등의 매처를 사용하여 복잡한 조건을 표현할 수 있다.
  3. 유연성:

    • 여러 조건을 조합하여 사용할 수 있다. 예를 들어, assertThat(list, hasSize(3))assertThat(list, contains("A", "B", "C"))를 함께 사용할 수 있다.

예시

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

public class ExampleTest {
    @Test
    public void testSomething() {
        int actual = 5;
        int expected = 5;

        // 기본적인 값 비교
        assertThat(actual, is(expected));

        // 다른 매처 사용
        List<String> list = Arrays.asList("A", "B", "C");
        assertThat(list, hasSize(3));
        assertThat(list, contains("A", "B", "C"));
    }
}

assertThat은 테스트 코드의 가독성을 높이고, 다양한 조건을 쉽게 검증할 수 있는 강력한 도구다. 더 복잡한 테스트 시나리오에서도 유용하게 사용할 수 있다.


결론

결론적으로, assertThat은 더 가독성이 좋고 유연한 방식으로 assertions을 수행할 수 있는 반면, assertEquals는 간단한 비교에 적합하다고 할 수 있다.

0개의 댓글