AssertJのJava8の機能
1. 概要
この記事は、 AssertJ のJava8関連の機能に焦点を当てており、シリーズの3番目の記事です。
その主な機能に関する一般的な情報をお探しの場合は、シリーズ Introduction to AssertJ の最初の記事を参照してから、 AssertJ forGuavaを参照してください。
2. Mavenの依存関係
Javaバージョン3.5.1以降、メインのAssertJCoreモジュールに8のサポートが含まれています。 モジュールを使用するには、pom.xmlファイルに次のセクションを含める必要があります。
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.5.1</version>
<scope>test</scope>
</dependency>
この依存関係は、基本的なJavaアサーションのみを対象としています。 高度なアサーションを使用する場合は、モジュールを個別に追加する必要があります。
最新のコアバージョンはここにあります。
3. Java8の機能
AssertJは、Java 8タイプに特別なヘルパーメソッドと新しいアサーションを提供することにより、Java8の機能を活用します。
3.1. オプションアサーション
単純なオプションインスタンスを作成しましょう。
Optional<String> givenOptional = Optional.of("something");
これで、オプションに何らかの値が含まれているかどうか、およびその値を含むものが何であるかを簡単に確認できます。
assertThat(givenOptional)
.isPresent()
.hasValue("something");
3.2. 述語アサーション
String の長さをチェックして、単純なPredicateインスタンスを作成しましょう。
Predicate<String> predicate = s -> s.length() > 4;
これで、述語:によって拒否または受け入れられた文字列を簡単に確認できます。
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 の、と同様に機能しますが、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。という1つの排他的なメソッドがあります。
LocalTimeオブジェクトの例を作成しましょう。
LocalTime givenLocalTime = LocalTime.of(12, 15);
そして今、あなたは主張することができます:
assertThat(givenLocalTime)
.isAfter(LocalTime.of(1, 0))
.hasSameHourAs(LocalTime.of(12, 0));
3.6. FlatExtractingヘルパーメソッド
FlatExtracting は、[X120X]Iterable要素からプロパティを抽出するためにJava8のラムダを利用する特別なユーティリティメソッドです。
LocalDateオブジェクトを使用して単純なListを作成しましょう。
List<LocalDate> 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 メソッドを使用すると、オブジェクトが提供されたすべてのアサーションを満たしているかどうかをすばやく確認できます。
Stringインスタンスの例を作成しましょう。
String givenString = "someString";
そして今、ラムダ本体としてアサーションを提供することができます:
assertThat(givenString)
.satisfies(s -> {
assertThat(s).isNotEmpty();
assertThat(s).hasSize(10);
});
3.8. HasOnlyOneElementSatisfyingヘルパーメソッド
HasOnlyOneElement ヘルパーメソッドを使用すると、Iterableインスタンスに提供されたアサーションを満たす要素が1つだけ含まれているかどうかを確認できます。
例を作成しましょうリスト:
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シリーズのこの最後の記事では、シリーズを締めくくる、すべての高度なAssertJJava8の機能について説明しました。
すべての例とコードスニペットの実装は、GitHubプロジェクトにあります。