티스토리 뷰

개발 방식 연구/TDD

AssertJ

kkoon9 2022. 1. 29. 23:59

AssertJ를 추가적으로 정리해보려고 한다.

맨 아래 AssertJ docs와 테스트 주도 개발 시작하기 책을 참고해서 작성하였다.

AssertJ vs. JUnit 글에서 보완할 부분을 먼저 짚고 넘어가자.

2022.01.26 - [Computer Science/TDD] - AssertJ vs. JUnit

 

AssertJ vs. JUnit

스터디에서 대니스가 말씀해주시길, JUnit 내에 있는 Assertions보다는 AssertJ를 많이 사용한다고 말씀해주셨다. 그래서 이번엔 이 두 개의 차이점을 정리해보려고 한다. 해당 내용은 다음 링크를 번

kkoon9.tistory.com

친절한 AssertJ

AssertJ는 JUnit보다 테스트 실패 메시지가 친절하다.

먼저 JUnit 코드를 살펴보자.

assertTrue(list.contains("a"));

이 테스트에 실패한다면 다음과 같은 실패 메시지가 표시된다.

org.opentest4j.AssertionFailedError: expected: <true> but was: <false>

위 실패 메시지는 실패했다는 사실만 보여준다.

다음은 AssertJ 코드를 살펴보자.

assertThat(list).contains("a");

이 테스트에 실패한다면 다음과 같은 실패 메시지가 표시된다.

java.lang.AssertionError:
Expecting:
<"bcd">
to contain:
<"a">

에러 메시지를 보면 “bcd”가 “a”를 포함할 거라고 기대하지만 그렇지 않다는 것을 알 수 있다.

이처럼 보다 친절한 테스트 실패 메시지를 통해서 테스트 코드를 보다 편리하게 짤 수 있다.

AssertJ 기본 검증 메서드

다음 메서드는 같은지 검증하는 메서드다.

  • isEqualTo(값) : 값과 같은지 검증한다.
  • isNotEqualTo(값) : 값과 같지 않은지 검증한다.
  • isNull() : null인지 검증한다.
  • isNotNull() : null인 아닌지 검증한다.
  • isIn(값 목록) : 값 목록에 포함되어 있는지 검증한다.
  • isNotIn(값 목록) : 값 목록에 포함되어 있지 않은지 검증한다.

isIn과 isNotIn의 값 목록은 가변 인자로 주거나 List와 타입을 이용해서 전달한다.

다음 메서드는 대소 비교를 검증하는 메서드다.

  • isLessThan(값) : 값보다 작은지 검증한다.
  • isLessThanOrEqualTo(값) : 값보다 작거나 같은지 검증한다.
  • isGreaterThan(값) : 값보다 큰지 검증한다.
  • isGreaterThanOrEqualTo(값) : 값보다 크거나 같은지 검증한다.
  • isBetween(값1, 값2) : 값1과 값2 사이에 포함되는지 검증한다.

다음 메서드는 boolean, Boolean 타입을 위한 검증 메서드다.

  • isTrue() : 값이 true인지 검증한다.
  • isFalse() : 값이 false인지 검증한다.

String에 대한 추가 검증 메서드

다음 메서드는 포함 여부를 검사하는 메서드이다.

  • contains(CharSequence... values) : 인자로 지정한 문자열들을 모두 포함하고 있는지 검증한다.
  • containsOnlyOnce(CharSequence sequence) : 해당 문자열을 딱 한 번만 포함하는지 검증한다.
  • containsOnlyDigits() : 숫자만 포함하는지 검증한다.
  • containsWhitespaces() : 공백 문자를 포함하는지 검증한다.
  • containsOnlyWhitespaces() : 공백 문자만 포함하는지 검증한다.
  • containsPattern(CharSequence regex) :지정한 정규 표현식에 일치하는 문자를 포함하는지 검증한다.
  • containsPattern(Pattern pattern) :지정한 정규 표현식에 일치하는 문자를 포함하는지 검증한다.
  • doesNotContain(CharSequence... values) : 인자로 지정한 문자열들을 모두 포함하고 있지 않은지 검증한다.
  • doesNotContainAnyWhitespaces() : 공백 문자를 포함하고 있지 않은지를 검증한다.
  • doesNotContainOnlyWhitespaces() : 공백 문자만 포함하고 있지 않은지를 검증한다.
  • doesNotContainPattern(Pattern pattern) : 정규 표현식에 일치하는 문자를 포함하고 있지 않은지를 검증한다.
  • doesNotContainPattern(CharSequence pattern) : 정규 표현식에 일치하는 문자를 포함하고 있지 않은지를 검증한다.

특정 문자열로 시작하거나 끝나는지 검증할 때 사용하는 메서드이다.

  • startsWith(CharSequence prefix) : 지정한 문자열로 시작하는지를 검증한다.
  • doesNotStartWith(CharSequence prefix) : 지정한 문자열로 시작하지 않는지를 검증한다.
  • endsWith(CharSequence suffix) : 지정한 문자열로 끝나는지를 검증한다.
  • doesNotEndWith(CharSequence suffix) : 지정한 문자열로 끝나지 않는지를 검증한다.

익셉션 관련 검증 메서드

보통 assertThatThrownBy()를 사용한다.

람다 표현식을 사용해서 익셉션이 발생하는지 검증한다.

@DisplayName("특정 위치의 문자를 가져올 때 위치 값(index)을 벗어나면 StringIndexOutOfBoundsException이 발생하는지에 대한 테스트")
@Test
void exception_charAt_test() {
    // given
    StringTdd stringTdd = new StringTdd();
    String input = "abc";
    int index = 4;    
		
		// when    
		
		// then
    Assertions.assertThatThrownBy(
            () -> {
                stringTdd.charAt(input, index);
            }
    )
            .isInstanceOf(StringIndexOutOfBoundsException.class)
            .hasMessageContaining("index [%d]는 벗어난 인덱스입니다.", index);
}

발생한 익셉션의 타입을 추가로 검증하려면 isInstanceOf() 메서드를 사용한다.

as()와 describedAs()

위 두 개의 메서드는 테스트 코드의 설명을 추가할 때 사용한다.

Reference

테스트 주도 개발 시작하기 Test-Driven Development

 

테스트 주도 개발 시작하기 Test-Driven Development

작동하는 깔끔한 코드를 만드는 데 필요한 습관들을 담았다. JUnit 5를 이용한 테스트 주도 개발 안내, 테스트 작성과 설계를 위한 대역, 테스트 가능한 설계 방법 안내, 유지보수하기 좋은 테스트

www.aladin.co.kr

AssertJ - fluent assertions java library

 

AssertJ - fluent assertions java library

Thanks to all the contributors of this release: Erhard Pointl, Stefano Cordio, Shivakumar Swamy, Iván Aguilar, Alberto Pascual, Gily H, Stefan Bischof, RGalways17, Andrey Kuzmin, Eugene Lesnov, Szymon Linowski, Julian Honnen, Almir James Lucena and Golan

assertj.github.io

 

'개발 방식 연구 > TDD' 카테고리의 다른 글

TDD 스터디 1주차 요약  (0) 2022.05.07
TDD 관련 글 정리  (0) 2022.02.13
AssertJ vs. JUnit  (0) 2022.01.26
TDD [3]  (0) 2022.01.25
TDD [2]  (0) 2022.01.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함