Java/Java 학습

[JAVA] UnitTest에서 사용하는 AssertJ의 AssertThat이란?

HSY_mumu 2022. 4. 28. 12:48
728x90

<테스트 코드 작성 방법>

기본적으로 이 단계를 만족하도록 테스트를 작성할 수 있다. 간혹 그렇지 않은 경우도 있지만 초심자라면 더더욱 이것을 따르는 것이 좋다!! 

1. given: 어떤 상황이 주어졌을 때(이 데이터 기반으로 함)

2. when: ~를 실행했을 때(검증할 것을 실행)

3. then: 검증한 결과가 ~가 나와야함

 

1,2 는 실행 단계, 3은 검증 단계라고 할 수 있다.

실행 단계에선는 사용자 입력을 모방해 테스트할 로직을 실행시키고

검증 단계에서는 실행 단계가 예상된 대로 동작하는지 검증한다.


1. AssertJ란? 

AssertJ는 많은 assertion을 제공하는 자바 라이브러리이다. 에러 메세지테스트 코드의 가독성을 매우 높여주고 각자 좋아하는 IDE에서 쓰기 굉장히 쉽다.

 

1) AssertJ 메서드 import

아래와 같이 정적 import를 하면 AssertJ의 다양한 API클래스 이름없이 바로 사용할 수 있다.

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

2. AssertJ의 assertThat 이란?

모든 테스트 코드는 asssertThat() 메서드에서 출발한다. 다음과 같은 포멧으로 AssertJ에서 제공하는 다양한 메서드를 연쇄 호출하며 코드를 작성할 수 있다.

assertThat(테스트 타켓).메소드1().메소드2().메소드3();

● 간단한 예제

@Test void a_few_simple_assertions() {
	assertThat("The Lord of the Rings").isNotNull() 
	.startsWith("The") 
    .contains("Lord") 
    .endsWith("Rings"); 
}

"The Lord of the Rings"라는 문자열이 널이 아니고 The로 시작하며 Lord를 포함하고 Rings로 끝난다는 것을 검증하는 코드라는 것을 쉽게 알 수 있을만큼 직관적이다.

3. JUnit의 assertEquals(expected, actual) & AssertJ의 assertThat(actual).isEqaulTo(expected) 비교

junit에서 제공하는 assertEquals에 비해 훨씬 가독성이 올라간다. junit의 assertEquals의 인자순서는 헷갈릴 가능성이 크다. 

1) assertEquals(exptected, actual): actual(실제값)이 expected(기대값)과 내용이 같은지 검증

2) assertThat(actual).isEqualTo(expected): actual(실제값)이 expected(기대값)과 내용이 같은지 검증

// 1. jUnit assertEquals
assertEquals(expected, actual); 
// 2. asserJ assertThat
assertThat(actual).isEqualTo(expected);

 

4. 메서드

▶ isEqualTo(Object o): equals()로 실제값이 기대값과 내용이 같은지 검증

isNotEqualTo(Object o): equals()로 실제값이 기대값과 내용이 다른지 검증

 

isInstanceOf(Class<?> type): 실제값이 기대값 타입의 인스턴스인지 검증

 isNotInstanceOf(Class<?> type): 실제값이 기대값 타입의 인스턴스가 아닌지 검증

▶ isSameAs(Object o): ==으로 실제 값이 기대값과 주소값(참조값)이 같은지 검증

 isNotSameAs(Object o): ==으로 실제 값이 기대값과 주소값(참조값)이 같은지 검증

 

 

[참고] https://pjh3749.tistory.com/241

 

[AssertJ] JUnit과 같이 쓰기 좋은 AssertJ 필수 부분 정리

AssertJ가 core document를 새로운 github.io로 이전했네요 :) . 본 글은 AssertJ 공식 문서를 핵심 챕터를 선정하여 번역하며 정리한 글 입니다. http://joel-costigliola.github.io/assertj/assertj-core.html A..

pjh3749.tistory.com

[참고] https://www.daleseo.com/assertj/

 

AssertJ 소개

Engineering Blog by Dale Seo

www.daleseo.com

[참고] https://bibi6666667.tistory.com/231

 

[Java] JUnit, AssertJ의 개념 및 기초적인 사용법 (단정문, 어노테이션)

JUnit의 개념 및 assert 메소드(단정문), 어노테이션 출처 : 링크1, 링크2, 링크3, 링크4. 감사합니다🙇‍♀️🙇‍♀️ JUnit이란? 자바를 위한 단위 테스트 라이브러리(오픈소스)이다. 자바 애플리케

bibi6666667.tistory.com

 

728x90