Spring Boot + JavaプロジェクトでAssertJを用いてList中のBeanオブジェクトを指定したプロパティで比較する

2020年7月12日

Beanのリストを比較する際に比較対象のプロパティを指定する

isEqualToIgnoringGivenFieldsメソッドのようなものを使いたかったが見当たらなかった。 AssertJ Core features highlight

解決方法

extractingメソッドで比較対象のプロパティを指定し、tupleで期待結果を記述する。 下記の例ではBookクラスのid以外を比較対象とし、2つのリストの中身が等しいかテストしている。Beanクラスは以下の通り。

import lombok.Data;
@Data
public class Book {
    private int id;
    private String name;
    private String author;
    private Category category;
}

JUnitテスト

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;

public class Test {

    @Test
    public void test1() {
        List list1 = new ArrayList<>();
        Book book1 = new Book();
        book1.setId(1);
        book1.setName("book1");
        book1.setAuthor("hoge");
        Book book2 = new Book();
        book2.setId(2);
        book2.setName("book2");
        book2.setAuthor("hogehoge");
        list1.add(book1);
        list1.add(book2);
        assertThat(list1).extracting("name", "author")
            .contains(tuple("book1", "hoge"), tuple("book2", "hogehoge"));
    }
}