1. 개요

이 기사는 AssertJ 의 Java8 관련 기능에 중점을 두고 있으며 시리즈의 세 번째 기사입니다.

주요 기능에 대한 일반 정보를 찾고 있다면 AssertJ 소개 시리즈의 첫 번째 기사 와 AssertJ for Guava 를 살펴보십시오 .

2. 메이븐 의존성

Java 8의 지원은 버전 3.5.1부터 기본 AssertJ Core 모듈에 포함되어 있습니다. 모듈을 사용하려면 pom.xml 파일 에 다음 섹션을 포함해야 합니다.

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.5.1</version>
    <scope>test</scope>
</dependency>

이 의존성은 기본 Java 어설션에만 적용됩니다. 고급 어설션을 사용하려면 모듈을 별도로 추가해야 합니다.

최신 Core 버전은 여기 에서 찾을 수 있습니다 .

3. 자바 8 기능

AssertJ는 Java 8 유형에 대한 특수 헬퍼 메서드 및 새로운 어설션을 제공하여 Java 8 기능을 활용합니다.

3.1. 선택적 어설션

간단한 Optional 인스턴스를 만들어 보겠습니다.

Optional<String> givenOptional = Optional.of("something");

이제 Optional 에 어떤 값이 포함되어 있는지, 포함된 값이 무엇인지 쉽게 확인할 수 있습니다.

assertThat(givenOptional)
  .isPresent()
  .hasValue("something");

3.2. 술어 어설션

String 의 길이를 확인하여 간단한 Predicate 인스턴스를 생성해 보겠습니다 .

Predicate<String> predicate = s -> s.length() > 4;

이제 술어 에 의해 거부되거나 수락 되는 String 을 쉽게 확인할 수 있습니다 .

assertThat(predicate)
  .accepts("aaaaa", "bbbbb")
  .rejects("a", "b")
  .acceptsAll(asList("aaaaa", "bbbbb"))
  .rejectsAll(asList("a", "b"));

3.3. LocalDate 어설션

두 개의 LocalDate 개체 를 정의하여 시작하겠습니다 .

LocalDate givenLocalDate = LocalDate.of(2016, 7, 8);
LocalDate todayDate = LocalDate.now();

이제 주어진 날짜가 주어진 날짜 이전/이후인지 또는 오늘인지 쉽게 확인할 수 있습니다.

assertThat(givenLocalDate)
  .isBefore(LocalDate.of(2020, 7, 8))
  .isAfterOrEqualTo(LocalDate.of(1989, 7, 8));

assertThat(todayDate)
  .isAfter(LocalDate.of(1989, 7, 8))
  .isToday();

3.4. LocalDateTime 어설션

LocalDateTime 어설션 은 LocalDate 의 어설과 유사하게 작동 하지만 isToday 메소드 를 공유하지 않습니다 .

예제 LocalDateTime 개체를 만들어 보겠습니다.

LocalDateTime givenLocalDate = LocalDateTime.of(2016, 7, 8, 12, 0);

이제 다음을 확인할 수 있습니다.

assertThat(givenLocalDate)
  .isBefore(LocalDateTime.of(2020, 7, 8, 11, 2));

3.5. LocalTime 어설션

LocalTime 어설션 은 다른 java.util.time.* 어설션과 유사하게 작동하지만 hasSameHourAs라는 한 가지 배타적인 메서드가 있습니다 .

예제 LocalTime 개체를 만들어 보겠습니다.

LocalTime givenLocalTime = LocalTime.of(12, 15);

이제 다음을 주장할 수 있습니다.

assertThat(givenLocalTime)
  .isAfter(LocalTime.of(1, 0))
  .hasSameHourAs(LocalTime.of(12, 0));

3.6. FlatExtracting 도우미 메서드

FlatExtractingIterable 요소 에서 속성을 추출하기 위해 Java 8의 람다를 활용하는 특수 유틸리티 메서드입니다 .

LocalDate 개체 로 간단한 List 을 만들어 보겠습니다.

List<LocalDate> givenList = asList(ofYearDay(2016, 5), ofYearDay(2015, 6));

이제 이 List 에 2015년 이 포함된 LocalDate 개체가 하나 이상 포함되어 있는지 쉽게 확인할 수 있습니다 .

assertThat(givenList)
  .flatExtracting(LocalDate::getYear)
  .contains(2015);

flatExtracting 방법 은 우리를 필드 추출로 제한하지 않습니다. 우리는 항상 모든 기능을 제공할 수 있습니다.

assertThat(givenList)
  .flatExtracting(LocalDate::isLeapYear)
  .contains(true);

또는:

assertThat(givenList)
  .flatExtracting(Object::getClass)
  .contains(LocalDate.class);

한 번에 여러 속성을 추출할 수도 있습니다.

assertThat(givenList)
  .flatExtracting(LocalDate::getYear, LocalDate::getDayOfMonth)
  .contains(2015, 6);

3.7. 도우미 메서드 충족

Satisfies 메서드를 사용하면 개체가 제공된 모든 어설션을 충족하는지 빠르게 확인할 수 있습니다 .

예제 String 인스턴스를 만들어 보겠습니다.

String givenString = "someString";

이제 어설션을 람다 본문으로 제공할 수 있습니다.

assertThat(givenString)
  .satisfies(s -> {
    assertThat(s).isNotEmpty();
    assertThat(s).hasSize(10);
  });

3.8. HasOnlyOneElementSatisfying 도우미 메서드

HasOnlyOneElement 도우미 메서드를 사용하면 Iterable 인스턴스에 제공된 주장을 충족하는 요소가 정확히 하나만 포함되어 있는지 확인할 수 있습니다.

예제 List을 만들어 보겠습니다.

List<String> givenList = Arrays.asList("");

이제 다음을 주장할 수 있습니다.

assertThat(givenList)
  .hasOnlyOneElementSatisfying(s -> assertThat(s).isEmpty());

3.9. 일치 도우미 메서드

Matches 도우미 메서드를 사용하면 지정된 개체가 지정된 Predicate 함수와 일치하는지 확인할 수 있습니다.

빈 문자열 을 살펴보겠습니다 .

String emptyString = "";

이제 적절한 Predicate 람다 함수 를 제공하여 상태를 확인할 수 있습니다 .

assertThat(emptyString)
  .matches(String::isEmpty);

4. 결론

AssertJ 시리즈의 이 마지막 기사에서는 모든 고급 AssertJ Java 8 기능을 살펴보고 시리즈를 마무리합니다.

모든 예제 및 코드 조각의 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 .

다음 »
AssertJ를 사용한 사용자 지정 어설션
« 이전
구아바용 AssertJ
Junit footer banner