Spring BootでAssertJの3系を使う

スポンサーリンク

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);
}