어제 오늘 내일

[JUnit] assertEquals() – 예상 값과 실제 값 비교 본문

IT/JUnit

[JUnit] assertEquals() – 예상 값과 실제 값 비교

hi.anna 2026. 1. 4. 08:54

 

1. assertEquals() 메소드

assertEquals() 메소드는 JUnit에서 가장 기본적으로 사용되는 단정(Assertion) 메소드이며, 테스트 결과가 예상값(expected)과 실제값(actual)이 동일한지를 비교하는 기능을 제공합니다.
단위 테스트에서 특정 메소드의 동작이 올바르게 수행되었는지 검증할 때 필수적으로 사용합니다.

JUnit5 기준 assertEquals() 메소드의 대표적인 정의는 다음과 같습니다.

assertEquals(expected, actual);
assertEquals(expected, actual, message);
  • expected: 테스트에서 기대하는 값
  • actual: 실제 실행 결과
  • message: 비교 실패 시 출력할 설명 메시지(선택)

 

2. 기본적인 assertEquals() 사용 예제

가장 단순한 형태로 숫자 계산 결과를 검증하는 예제입니다.

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    void testAddition() {
        int result = 2 + 3;
        assertEquals(5, result);
    }
}

코드 설명

  • result에는 실제 계산된 값 5가 저장됩니다.
  • assertEquals(5, result)는 예상값 5와 실제값이 일치하는지 확인합니다.
  • 값이 같으면 테스트가 성공하며, 다르면 AssertionError가 발생합니다.

 

3. 메시지를 포함한 assertEquals() 사용 예제

테스트가 실패했을 때 어떤 문제인지 명확히 알 수 있도록 메시지를 추가할 수 있습니다.

@Test
void testMultiplication() {
    int result = 3 * 3;
    assertEquals(10, result, "3 * 3의 계산 결과가 예상과 다릅니다.");
}

코드 설명

  • 실제 계산 결과는 9이지만 예상값을 10으로 지정하여 의도적으로 실패하는 테스트입니다.
  • 실패 시 "3 * 3의 계산 결과가 예상과 다릅니다."라는 메시지가 출력되어 디버깅 시 도움을 줍니다.

 

4. 문자열 비교에 사용되는 assertEquals()

문자열은 대소문자가 엄격하게 구분되므로 정확한 비교가 필요합니다.

@Test
void testStringCompare() {
    String text = "Hello JUnit";
    assertEquals("Hello JUnit", text);
}

코드 설명

  • 문자열 비교에 있어 assertEquals()는 동일 여부를 정확히 판단합니다.
  • "Hello JUnit"과 "hello junit"처럼 대소문자 차이가 있으면 테스트는 실패합니다.

 

5. 객체 비교에 사용되는 assertEquals() – equals() 재정의 필요성

객체 비교 시 assertEquals() 메소드는 객체의 equals() 메소드를 사용하여 동등성을 판단합니다.
따라서 객체가 동일한 값을 갖고 있어도 equals()가 재정의되지 않았다면 비교에 실패합니다.

class User {
    String name;

    User(String name) {
        this.name = name;
    }
}

@Test
void testUserObject() {
    User u1 = new User("Tom");
    User u2 = new User("Tom");
    assertEquals(u1, u2);  // equals()를 재정의하지 않았기 때문에 실패합니다.
}

코드 설명

  • 동일한 값을 가진 두 객체를 생성했지만 equals()가 재정의되지 않아 서로 다른 객체로 판단됩니다.
  • 객체 비교를 위해서는 equals()와 hashCode()를 재정의해야 합니다.

 

6. assertEquals() 사용 시 주의할 점

6.1 expected와 actual 순서

assertEquals(expected, actual) 순서를 반드시 지켜야 합니다.
순서를 반대로 써도 동작하지만, 테스트 실패 메시지가 직관적이지 않아 디버깅이 어려워집니다.

6.2 null 비교 시 대안 존재

null 확인을 위해 assertEquals(null, value)를 사용할 수 있지만,
의도를 더 명확히 하기 위해 assertNull() 또는 assertNotNull()을 사용하는 것이 좋습니다.

 

7. 정리

assertEquals() 메소드는 JUnit 테스트의 기본이 되는 매우 중요한 도구입니다.
숫자, 문자열, 객체 등 다양한 타입을 비교할 때 사용하며, 메소드 사용법과 객체 비교 시 equals() 재정의 여부를 이해하는 것이 중요합니다.

 

반응형
Comments