AssertJのJava 8機能

AssertJのJava 8機能

1. 概要

この記事は、AssertJのJava8関連の機能に焦点を当てており、シリーズの3番目の記事です。

主な機能に関する一般的な情報をお探しの場合は、シリーズの最初の記事Introduction to AssertJをご覧になり、次にAssertJ for Guavaをご覧ください。

2. Mavenの依存関係

Java 8のサポートは、バージョン3.5.1以降のメインのAssertJCoreモジュールに含まれています。 モジュールを使用するには、pom.xmlファイルに次のセクションを含める必要があります。


    org.assertj
    assertj-core
    3.5.1
    test

この依存関係は、基本的なJavaアサーションのみを対象としています。 高度なアサーションを使用する場合は、追加のモジュールを個別に追加する必要があります。

最新のCoreバージョンはhereにあります。

3. Java8の機能

AssertJは、Java 8型の特別なヘルパーメソッドと新しいアサーションを提供することにより、Java 8の機能を活用します。

3.1. Optionalアサーション

単純なOptionalインスタンスを作成しましょう。

Optional givenOptional = Optional.of("something");

これで、Optionalに何らかの値が含まれているかどうか、およびその値が何であるかを簡単に確認できます。

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

3.2. Predicateアサーション

Stringの長さをチェックして、単純なPredicateインスタンスを作成しましょう。

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

これで、どのStringsがPredicate:によって拒否または受け入れられたかを簡単に確認できます。

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

3.3. LocalDateアサーション

2つの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‘s _、_と同様に機能しますが、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.*アサーションと同様に機能しますが、1つの排他的なメソッドがあります:hasSameHourAs.

LocalTimeオブジェクトの例を作成しましょう。

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

そして今、あなたは主張することができます:

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

3.6. FlatExtractingヘルパーメソッド

FlatExtractingは、Iterable要素.からプロパティを抽出するためにJava8のラムダを利用する特別なユーティリティメソッドです。

LocalDateオブジェクトを使用して単純なListを作成しましょう。

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

これで、このListに2015年のLocalDateオブジェクトが少なくとも1つ含まれているかどうかを簡単に確認できます。

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ヘルパーメソッド

Satisfiesメソッドを使用すると、オブジェクトが提供されたすべてのアサーションを満たしているかどうかをすばやく確認できます。

Stringインスタンスの例を作成しましょう。

String givenString = "someString";

そして、アサーションをラムダ本体として提供できるようになりました。

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

3.8. HasOnlyOneElementSatisfyingヘルパーメソッド

HasOnlyOneElementヘルパーメソッドを使用すると、Iterableインスタンスに、提供されたアサーションを満たす要素が1つだけ含まれているかどうかを確認できます。

List:の例を作成しましょう

List givenList = Arrays.asList("");

そして今、あなたは主張することができます:

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

3.9. Matchesヘルパーメソッド

Matchesヘルパーメソッドを使用すると、特定のオブジェクトが特定のPredicate関数と一致するかどうかを確認できます。

空のString:を取りましょう

String emptyString = "";

これで、適切なPredicateラムダ関数を提供することでその状態を確認できます。

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

4. 結論

AssertJシリーズのこの最後の記事では、AssertJ Java 8のすべての高度な機能について説明し、シリーズを締めくくりました。

すべての例とコードスニペットの実装は、GitHub projectにあります。