Spring Boot(現在の最新の1.4系)はJava7もサポートしているため、spring-boot-starter-testで依存するAssertJは、Java8対応の3系ではなく、2系となっています。
3系に変えたい場合には、AssetJ3系を依存関係に追加するだけです。 (Gradleの依存関係の解決で、同じライブラリで複数のバージョンがあった場合は、デフォルトだと最新のものが利用される)
dependencies { testCompile('org.springframework.boot:spring-boot-starter-test') testCompile('org.assertj:assertj-core:3.6.1') }
これでAssertJの3系で追加されたラムダ対応のメソッドが利用できます。
List<String> names = Arrays.asList("Taro", "Hanako", "Jiro"); assertThat(names) .filteredOn(x -> x.contains("ro")) .containsExactly("Taro", "Jiro");
なお、extracting
は、AssertJの2系でもラムダ使えます。
これは、下記のようなメソッドが定義されていて、Extractor
が1つしかメソッドを持たないインタフェースとなっているためです。(ラムダで書けるのは、抽象メソッドが1つだけ定義されたインタフェース)
public <V> ListAssert<V> extracting(Extractor<? super ELEMENT, V> extractor)
public interface Extractor<F, T> { T extract(F input); }