hrming
[Java] JUnit의 assertThat vs AssertJ의 assertThat 본문
토비의 스프링 강의를 듣다가, 테스트 관련하여 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 |