web-dev-qa-db-ja.com

JUnit 5にassertThat()関数がない場合、JUnit 5でHamcrestを使用するにはどうすればよいですか?

JUnit 4でHamcrestを使用するには、assertThat()関数を使用します。ただし、JUnit 5にはassertThat()関数はありません。 assertThat()なしでHamcrestを使用するにはどうすればよいですか?

30
Max

Hamcrestがクラスパスに含まれていることを確認してから、Hamcrestが提供するassertThat()関数を使用する必要があります。現在の JUnit 5ユーザーガイド-テストアサーションの記述 から、

JUnit Jupiterのorg.junit.jupiter.Assertionsクラスは、JUnit 4のorg.junit.AssertクラスにあるようなHamcrest Matcherを受け入れるassertThat()メソッドを提供しません。代わりに、開発者は、サードパーティのアサーションライブラリによって提供されるマッチャーの組み込みサポートを使用することをお勧めします。

次の例は、JUnit JupiterテストでHamcrestのassertThat()サポートを使用する方法を示しています。 Hamcrestライブラリーがクラスパスに追加されている限り、assertThat()、is()、equalTo()などのメソッドを静的にインポートして、以下のassertWithHamcrestMatcher()メソッドのようなテストで使用できます。

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.jupiter.api.Test;

class HamcrestAssertionDemo {

    @Test
    void assertWithHamcrestMatcher() {
        assertThat(2 + 1, is(equalTo(3)));
    }

}

当然、JUnit 4プログラミングモデルに基づくレガシーテストは、org.junit.Assert#assertThatを引き続き使用できます。」

38
Max

https://github.com/junit-team/junit5/issues/147 を参照してください:

jUnit5ではHamcrestとAssertJの両方を使用できます。両方のフレームワークにはシンプルなassertThatメソッドがあり、必要に応じてインポートして使用できます。

現在、依存関係を回避するために、独自のアサーション内でこれらのフレームワークをサポートする予定はありません。それでも、それらは非常にうまく使用できます。

2
GKislin