AssertJ 3.12.0が2019/2/14にリリースされました。これに伴ってユーザガイドがリニューアルされました。
新機能いくつか試してみました。
ネストしたオブジェクトの検証
AbstractObjectAssert#usingRecursiveComparison()
を呼ぶことでネストしたオブジェクトの検証ができます。
@Test void nestObjectFieldAssertions() { Address address1 = new Address("東京都", "千代田区千代田"); Person person1 = new Person("内立", 20, address1); Address address2 = new Address("東京都", "渋谷区東"); Person person2 = new Person("良介", 20, address2); Address address3 = new Address("東京都", null); Person person3 = new Person(null, 20, address3); // 指定したフィールドを無視する Assertions.assertThat(person1).usingRecursiveComparison() .ignoringFields("name", "address.following") .isEqualTo(person2); Assertions.assertThat(person1).usingRecursiveComparison() .ignoringFields("name", "address") .isEqualTo(person2); // nullのフィールドを無視する Assertions.assertThat(person3).usingRecursiveComparison() .ignoringActualNullFields() .isEqualTo(person1); }
指定した1要素だけのListであることの検証
AbstractIterableAssert#hasOnlyOneElementSatisfying(Consumer elementAssertions)
を使う。
@Test void hasOnlyOneElementSatisfying() { List<Brand> brands = List.of(new Brand("ETHOSENS", "Hashimoto", Gender.MAN)); assertThat(brands) .hasOnlyOneElementSatisfying(brand -> { assertThat(brand.getName()).isEqualTo("ETHOSENS"); assertThat(brand.getDesigner()).isEqualTo("Hashimoto"); assertThat(brand.getGender()).isEqualTo(Gender.MAN); }); }
全フィールドがnullであることの検証
AbstratObjectAssert#hasAllNullFieldsOrProperties()
を使います。
AbstratObjectAssert#hasAllNullFieldsOrPropertiesExcept(String... propertiesOrFieldsToIgnore)
を使うと、無視するフィールドを指定することができます。
@Test void hasAllNullFieldsOrPropertiesAssertion() { Brand ethosens = new Brand(null, null, null); Assertions.assertThat(ethosens) .hasAllNullFieldsOrProperties(); Assertions.assertThat(ethosens) .hasAllNullFieldsOrPropertiesExcept(); Brand bedsidedrama = new Brand("bedsidedrama", "Tanita", null); // 指定したフィールドは無視される Assertions.assertThat(bedsidedrama) .hasAllNullFieldsOrPropertiesExcept("name", "designer"); }
Listサイズの検証
@Test void hasSizeAssertion() { Brand stof = new Brand("stof", "Tanita", Gender.MAN); Brand bedsidedrama = new Brand("bedsidedrama", "Tanita", Gender.MAN); Brand ethosens = new Brand("ETHOSENS", "Hashimoto", Gender.MAN); List<Brand> brands = List.of(stof, bedsidedrama, ethosens); Assertions.assertThat(brands) .hasSizeGreaterThan(1) .hasSizeLessThan(4) .hasSizeGreaterThanOrEqualTo(3) .hasSizeLessThanOrEqualTo(3) .hasSizeBetween(1,4); }
Mapに含まれる全要素が一致することの検証
AbstractMapAssert#containsAllEntriesOf(Map other)
を使う。
@Test void containsExactlyEntriesOfAssertion() { Map<Integer, String> map1 = Map.of(1, "TEST1", 2, "TEST2"); Map<Integer, String> map2 = Map.of(1, "TEST1", 2, "TEST2"); Assertions.assertThat(map1).containsAllEntriesOf(map2); }
指定したkeyのみ含まれていること
AbstractMapAssert#containsOnlyKeys(Iterable keys)
を使う。
@Test void containsOnlyKeysAssertion() { Map<Integer, String> map1 = Map.of(1, "TEST1", 2, "TEST2"); Assertions.assertThat(map1).containsOnlyKeys(List.of(1, 2)); }
一番の目玉はネストしたオブジェクトの検証ができるようになったことです!!