Help us understand the problem. What is going on with this article?

JavaのテストにはAssertJがオススメ

More than 3 years have passed since last update.

JavaでのテストはJUnit4が使われていると思いますが、自分としては、それに加えてAssertJをオススメします。

AssertJが使いやすい理由

JUnit4のassertThatと比べてAssertJが使いやすい理由は2つあります。

流れるようなインターフェース

AssertJは「Fluent assertions for java」とトップページに大きく書かれているように、流れるようなインターフェースが最大の特徴です。いちいちドキュメントを調べなくても、IDEの補完機能で適切なメソッドを調べられるので、JUnit4のassertThatに比べて書きやすいです。

拡張がMatcherに比べて遥かに楽

Matcherの拡張対象は「比較方法」で、AssertJの拡張対象は「クラス」なので比較するのは適切ではないかもしれませんが、Matcherの拡張が靴の上から足を掻く感じなのに比べて、AssertJの拡張はシンプルです。

それに、実際にプログラムを書いていると、比較方法の拡張が必要なケースはあまりなく、自作クラスでAssertしたいことの方が圧倒的に多いです。

カスタムAssertionの定義

FooClassのカスタムAssertionは以下のように作れます。Genericsの使い方がちょっと不思議に感じるかもしれませんが、自分で作ってみると納得できます。

public class FooClassAssert extends AbstractAssert<FooClassAssert, FooClass> {
  // ここは定型文
  public FooClassAssert(FooClass actual) {
    super(actual, FooClassAssert.class);
  }

  // ここも定型文
  public static FooClassAssert assertThat(FooClass actual) {
    return new FooClassAssert(actual);
  }

  // 独自Assertion
  public FooClassAssert hasValue(String key) {
    // ここも定型文
    isNotNull();

    // Assertionの実質的な本体
    if (actual.getValue(key) == null) {
      failWithMessage("エラーメッセージ");
    }

    // メソッドチェーンをするためthisを返す
    return this;
  }
}

カスタムAssertionの使用

// assertThatを使うためのstatic importは必要
assertThat(fooObj).hasValue("bar");

最後に

AssertJは日本だとびっくりするくらいマイナーなのが残念です。JUnit4のassertThatにモヤモヤしている人は試してみてはどうでしょうか?

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした