前回に引き続き、JUnit5について書きます。今回は、RepeatedTestについてです。
RepeatedTest
指定した回数@RepeatedTestを付与したテストメソッドを実行してくれます。具体的に言うと、@RepeatedTestのvalue属性に実行したい回数を指定します。
サンプルコード
実行結果
解説
BeforeEachは、各テストの各繰り返し回数ごとに実行される
以下の結果から見出しのことが言えます。
表示名がカスタマイズできる
RepeatedTestでは、先に説明したことに加えて、繰り返し回数ごとに表示名(displayName)をカスタマイズすることができます。デフォルトの表示名は、RepeatedTest.SHORT_DISPLAY_NAMEである、「repetition [現在の実行回数] of [実行すべき回数]」です。
静的なテキストと動的なプレースホルダーから成り立つメッセージを、@RepeatedTestのname属性に指定します。
用意されているプレースホルダーは、次の3つになります。
{displayName} | @RepeatedTestメソッドのdisplayName |
---|---|
{currentRepetition} | 現在の実行回数 |
{totalRepetitions} | 実行すべき回数 |
繰り返し回数ごとに表示名を変更しているテストが、customDisplayName()メソッドとcustomDisplayNameLongPattern()メソッドになります。
後者のテストでは、name属性にRepeatedTest.LONG_DISPLAY_NAMEを指定しています。実際に表示されるメッセージは、「Details... :: repetition [現在の実行回数] of [実行すべき回数]」です。
ここで、現在の実行回数や実行すべき回数ってどう取得すればいいの?って疑問がでてくると思います。
RepetitionInfoインターフェースをインジェクトすることで解決できます。
これは、getCurrentRepetition()メソッドとgetTotalRepetitions()メソッドを持ったインターフェースで、@RepeatedTest、@BeforeEach、@AfterEachが付与されたメソッドにのみインジェクトすることができます。
@RepeatedTestが付与されたメソッドが存在しないクラスで、@BeforeEachまたは@AfterEachが付与されたメソッドにRepetitionInfoをインジェクトしようとすると、ParameterResolutionExceptionがスローされます。
customDisplayName()メソッドを見てもらえば、使い方がわかると思います。
次回は、ParameterizedTestについて書きます。