Spring Boot + JavaプロジェクトでAssertJを用いてList中のBeanオブジェクトを指定したプロパティで比較する
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"));
}
}