<테스트 코드 작성 방법>
기본적으로 이 단계를 만족하도록 테스트를 작성할 수 있다. 간혹 그렇지 않은 경우도 있지만 초심자라면 더더욱 이것을 따르는 것이 좋다!!
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
[참고] https://www.daleseo.com/assertj/
[참고] https://bibi6666667.tistory.com/231
'Java > Java 학습' 카테고리의 다른 글
[JAVA] 예외 테스트 (jUnit5의 assertThrows) (0) | 2022.04.28 |
---|---|
[JAVA] JUnit5 기본 테스트 어노테이션(@Test, BeforeAll, @BeforeEach, @AfterAll, @AfterEach, @Disabled) (0) | 2022.04.28 |
[JAVA] Java8의 Optional이란? (0) | 2022.04.28 |
[JAVA] Java8의 Stream 이란? (0) | 2022.04.28 |
[JAVA] Map이란? HashMap 이란? (0) | 2022.04.27 |