AssertJ
AssertJ는 자바에서 테스트 코드를 작성할 때 사용되는 서드파티 라이브러리 중 하나이다.
(자매품으로 Hamcrest가 있다)
우리가 JUnit으로 단위 테스트 코드를 작성할 때 JUnit의 Assertions를 사용할 수도 있지만, AssertJ의 Assertions를 사용할 수 있다.
AssertJ를 사용했을 때 장점으로는 아래와 같다.
- 자연스럽게 코드가 읽히는 가독성
- 메소드 체이닝을 통해 여러 조건에 대한 테스트를 이해하기 쉬운 형태로 작성 가능
- 테스트 실패 메시지가 자세히 나와 있어 원인을 파악하기 쉬움
- 상황에 맞는 다양한 검증(Assertion) 메소드 제공
이러한 장점으로 JUnit 공식 문서에서도 AssertJ와 같은 라이브러리 사용을 추천하고 있다.
(출처: https://xxeol.tistory.com/12)
AssertJ 의존성 추가
그레이들 프로젝트에서 AssertJ를 사용하려면 dependencies 블록에 아래와 같은 의존성을 추가해야 한다.
testImplementation("org.assertj:assertj-core:3.25.1")
만약 현재 프로젝트가 스프링 부트를 이용하는 프로젝트라면 AssertJ 의존성을 명시적으로 추가하지 않아도 된다.
그레이들 의존성 중 spring-boot-starter-test에 AssertJ 의존성이 추가되어 있기 때문이다.
추가로, 메이븐 프로젝트를 사용할 때는 다음과 같이 의존성을 추가하면 된다.
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.25.1</version>
<scope>test</scope>
</dependency>
AssertJ 사용 예시
AssertJ를 이용해 테스트 코드를 작성하려면 먼저 Assertions 클래스의 스태틱 메소드를 import해야 한다.
import static org.assertj.core.api.Assertions.*;
AssertJ를 이용해 테스트 코드를 작성할 때는, 위에서 import한 스태틱 메소드 중 assertThat()으로 시작하는 것이 일반적이다.
assertThat()의 인자로 테스트하고 싶은 객체를 넣고, 메소드 체이닝을 통해 다양한 메소드를 호출하면 테스트 객체의 값을 검증할 수 있다.
// 테스트 메소드 내부
String name = "novol";
assertThat(name).isEqualTo("novol");
위의 코드를 통해 name이라는 테스트 대상 객체의 값이 "novol"(우리가 기대하는 값)인지 테스트할 수 있다.
isEqualTo() 메소드는 이름 그대로 assertThat()의 인자로 들어간 값이 isEqualTo()의 인자로 들어간 값과 동일하면 통과시키고, 아니면 AssertionError를 발생시키는 역할을 한다.
AssertJ에는 isNotNull(), startWith(), contains() 등 다양한 상황에 맞는 수많은 검증 메소드들가 정의되어 있다.
그 결과 테스트 코드 작성시 상황에 맞는 메소드를 사용하여 가독성 좋은 코드를 완성할 수 있게 된다.
심지어 개발자가 AssertJ의 메소드를 모르는 상태더라도, 인텔리제이와 같은 IDE를 사용하는 경우 IDE의 코드 자동 완성/추천 기능을 통해 상황에 맞는 테스트 코드를 즉흥적으로 선택하여 작성할 수 있다.
여기까지 AssertJ가 무엇인지, 어떻게 사용하는지 간략하게 정리해 보았다.
참고한 글
https://assertj.github.io/doc/#assertj-core
'백엔드 공부 메모 > 테스트 코드' 카테고리의 다른 글
스프링 컨트롤러 단위 테스트 - MockMvc 클래스 소개, 작동 원리 (2) | 2024.03.27 |
---|---|
JUnit 4 테스트 진행 과정, 스프링 부트 테스트용 어노테이션 (0) | 2024.03.23 |
JUnit 간단 소개, JUnit 4 사용 예시 (0) | 2024.03.23 |