hrming

[Java] JUnit의 assertThat vs AssertJ의 assertThat 본문

Java

[Java] JUnit의 assertThat vs AssertJ의 assertThat

hrming 2025. 2. 8. 14:22

토비의 스프링 강의를 듣다가, 테스트 관련하여 AssertJ라는 라이브러리를 알게되어, JUnit과의 차이점을 확인해봤다.

 

■ JUnit 의 assertThat

- JUnit 4에서는 assertThat을 제공하며, 이는 Hamcrest 라이브러리를 기반으로 함

- 주로 org.junit.Assert.assertThat 또는 org.hamcrest.MatcherAssert.assertThat을 사용함

- Hamcrest의 Matcher 객체와 함께 사용해야 함 ( is(), not(), containsString() 등)

- JUnit 5에서는 기본 제공되지 않으며, 별도로  Hamcrest를 추가해야 함.

 

비교 항목 org.junit.Assert.assertThat org.hamcrest.MatcherAssert.assertThat
제공 주체 JUnit 4 Hamcrest 라이브러리
JUnit 4 지원 ✅ 지원 지원
JUnit 5 지원 ❌ 제거됨 지원
Hamcrest 의존 여부 ✅ 내부적으로 Hamcrest 사용 ✅ 직접 Hamcrest 사용
TestNG등 다른 프레임워크에서 사용 가능 여부 ❌ JUnit에 종속적 ✅ JUnit없이 사용 가능 

**  JUnit 4에서는 org.junit.Assert.assertThat을 쓸 수 있지만, 유지보수성과 확장성을 고려하면 org.hamcrest.MatcherAssert.assertThat을 직접 사용하는 것이 더 낫다.

** JUnit 5에서는 org.hamcrest.MatcherAssert.assertThat을 사용하거나, 더 좋은 선택지로 AssertJ의 assertThat을 사용하는 것이 권장됨.

 

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.Test;

public class JUnitAssertThatTest {
    @Test
    public void testWithJUnitAssertThat() {
        String actual = "hello";
        assertThat(actual, is("hello")); // Hamcrest matcher 사용
        assertThat(actual, not("world"));
        assertThat(actual, containsString("ell"));
    }
}

 


■ AssertJ의 assertThat

- Java의 강력한 Assertion(단언) 라이브러리

- JUnit과 함께 사용되며, 테스트 검증(Assertions)을 더 편리하게 해줌

- JUnit의 assertThat보다 훨씬 직관적이고 강력한 기능 제공

- 메서드 체이닝 지원으로 가독성이 높음

 

    ** 단언(Assertions)이란, 

    : 주어진 조건이 참이어야 한다는 것을 코드로 명시하는 것

    : 조건이 충족되지 않으면 테스트 실패

    : 주로 테스트 자동화에서 사용되며, 코드가 기대한 값을 반환하는 지 검증하는 역할

import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;

class AssertJTest {
    @Test
    void testStringAssertions() {
        String text = "hello world";
        
        assertThat(text)
            .isNotEmpty()
            .contains("hello")
            .doesNotContain("bye")
            .startsWith("hello")
            .endsWith("world");
    }
}

 

✏️ JUnit은 테스트를 실해하는 프레임워크, AssertJ는 테스트 검증을 더 편리하게 도와주는 라이브러리

✏️ JUnit만 사용해도 테스트 가능하지만, AssertJ를 사용하면 더 간결하고 강력한 테스트 작성 가능

✏️ 최신 Java 테스트에서는 JUnit 5 + AssertJ 조합이 많이 사용됨

 


 참고 및 출처

https://jwkim96.tistory.com/168

 

[Java] JUnit의 assertThat보다 assertj의 assertThat을 써야하는 이유

이 글은 JUnit4를 기준으로 작성되었습니다. 테스트 코드를 작성할 때, 크게 두 부분으로 나누어서 생각할 수 있습니다. 1. 실행 단계 2. 검증 단계 실행 단계에서는 사용자 입력을 모방하여 테스트

jwkim96.tistory.com

 

chatGPT

 

'Java' 카테고리의 다른 글

[Java] Reflection API  (0) 2024.09.20
[Java] 이미지(File)를 Base64로 변환하기  (0) 2024.09.03
[Java] String.valueOf()  (0) 2024.07.18
[Java] private static final  (0) 2024.07.16
[Java] Boolean vs boolean  (0) 2023.04.05
Comments