Java/Spring

(22.06.08)(Spring) 테스트 코드 작성을 도와주는 라이브러리, AssertJ

Job_E 2022. 6. 9. 02:03

 

AssertJ : Junit 기반 테스트 코드를 작성하는데 사용되는 라이브러리

 

장점

- 메서드 체이닝을 지원하기 위해 좀 더 깔끔하고 읽기 쉬운 테스트 코드 작성 가능

(Junit에서 기본적으로 제공하는 assertEquals에 비해 가독성이 좋다는 것이 장점)

assertEquals(a,b); // a == b ? 같은지 : 다른지
assertThat(b).isEqualTo(a);  // a == b ? 같은지 : 다른지

 

- 개발자가 테스트를 하면서 필요하다고 상상할 수 있는 거의 모든 메서드를 제공

 

라이브러리 의존성 설정

Java 8 이상 기반 프로젝트는 3.x 버전을, java 7 이하 기반 프로젝트는 2.x 버전을 사용해야함

 

Gradle

- Java 8 이상

 

testCompile 'org.assertj:assertj-core:3.6.2'

 

- Java 7 이하

testCompile 'org.assertj:assertj-core:2.6.0'

 

Maven

<dependency>
  <groupId>org.assertj</groupId>
  <artifactId>assertj-core</artifactId>
  <!-- use 2.6.0 for Java 7 projects -->
  <version>3.6.2</version>
  <scope>test</scope>
</dependency>

 

AssertJ 메서드 임포트

다음과 같이 정적 임포트를 시행하면, AssertJ의 다양한 API 클래스를 이름없이 바로 사용할 수 있음

import static org.assertj.core.api.Assertions.*;

(static import에 대한 설명은 아래 페이지에 기록해놓았다.)

 

(Spring) 정적 임포트 : Static Import

JDK 1.5부터 추가된 기능. import 문을 사용하면 클래스의 패키지명을 생략할 수 있는 것과 같이 (ex. import java.lang.Math; => Math.max(a,b) // java.lang 을 생략할 수 있음.) static import를 사용하면 stat..

kbjid17.tistory.com

 

 

테스트 대상 지정하기

- AssertJ의 모든 테스트 코드는 AssertThat()에서 시작

assertThat(target).method_1().method_2().method_3();

- 위와 같은 방식으로 여러 메서드를 연쇄 호출하면서 코드를 작성할 수 있음.

 

문자열 테스트

AssertJ를 쓰면 이런 걸 할 수 있다.

assertThat("Hello, world! Nice to meet you.") // 주어진 "Hello, world! Nice to meet you."라는 문자열은
				.isNotEmpty() // 비어있지 않고
				.contains("Nice") // "Nice"를 포함하고
				.contains("world") // "world"도 포함하고
				.doesNotContain("ZZZ") // "ZZZ"는 포함하지 않으며
				.startsWith("Hell") // "Hell"로 시작하고
				.endsWith("u.") // "u."로 끝나며
				.isEqualTo("Hello, world! Nice to meet you."); // "Hello, world! Nice to meet you."과 일치합니다.

 

숫자 테스트

assertThat(3.14d) // 주어진 3.14라는 숫자는
				.isPositive() // 양수이고
				.isGreaterThan(3) // 3보다 크며
				.isLessThan(4) // 4보다 작습니다
				.isEqualTo(3, offset(1d)) // 오프셋 1 기준으로 3과 같고
				.isEqualTo(3.1, offset(0.1d)) // 오프셋 0.1 기준으로 3.1과 같으며
				.isEqualTo(3.14); // 오프셋 없이는 3.14와 같습니다

 

(추가 : JPA 스프링 강의에서 사용했던 AssertJ Test)

assertThat(findMember.getId()).isEqualTo(member.getId()); // findMember로 찾았던 Id의 값이 기존에 있던 member의 Id와 같은지
assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); // findMember로 찾았던 UserName 값이 기존에 있던 member의 UserName과 같은지
assertThat(findMember).isEqualTo(member); // findMember로 찾았던 member이 기존에 있던 member인지

(※ 참조 사이트)

 

AssertJ 소개

Engineering Blog by Dale Seo

www.daleseo.com