백엔드 공부 메모/테스트 코드

AssertJ 간단 정리

볼륨조절불가 2024. 3. 30. 18:37
728x90

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

 

https://xxeol.tistory.com/12

 

https://velog.io/@dkswlstjr/SpringBoot-AssertJ-%EA%B2%80%EC%A6%9D%EB%AC%B8-%EB%B0%8F-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

728x90