7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AssertJで独自クラスのリストをテストする方法

Last updated at Posted at 2015-08-18

AssertJで独自クラスのリストをテストする場合は、Extractを使うのが楽です。

例えば以下のようなクラスがあったとします。

public class User {
    public String id;
    public int rank;

    public User(String id, int rank) {
        this.id = id;
        this.rank = rank;
    }
}

そのときに、以下のリストをテストしたいとします。

List<User> users = new ArrayList<>();
users.add(new User("abc", 10));
users.add(new User("def", 20));

このときは、Extractorを使って以下のように書けます。まずクラスを使った書き方。

import static org.assertj.core.api.Assertions.*;

import org.assertj.core.api.iterable.Extractor;
import org.assertj.core.groups.Tuple;

// 1つ目が展開元、2つ目が展開先(通常はTuple)
public class UserExtractor implements Extractor<User, Tuple>
{
    @Override
    public Tuple extract(User user)
    {
        // tupleはObjectの可変長引数を取るメソッド
        return tuple(user.id, user.rank);
    }
}

テストは以下のようにします。

assertThat(users).extracting(new UserExtractor())
    .contains(tuple("abc", 10))
    .contains(tuple("def", 20));

もちろん、ラムダ式を使うことで、以下のように書けます。

assertThat(users).extracting((u) -> tuple(u.id, u.rank))
    .contains(tuple("abc", 10))
    .contains(tuple("def", 20));

以下のようにフィールド名を文字列で指定することも可能です。

assertThat(users).extracting("id", "rank")
    .contains(tuple("abc", 10))
    .contains(tuple("def", 20));
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?