junit 5入門シリーズチュートリアル-12-junit 5依存注入コンストラクタ、方法
目次ディレクトリ 依存注入 TestInfoParameterResolver RepetitionInfoParameterResolver TestReporterParameterResolver @ExtendWith RandomParametersExtension その他
シリーズナビゲーション 依存注入
以前のすべてのJUnitバージョンでは、コンストラクション関数またはメソッドのパラメータのテストは許可されていません(少なくとも標準のRunner実装は許可されていません).JUnit Jupiterの主な変化の1つとして,構造関数と方法のテストにパラメータが許可されるようになった.これにより、より柔軟性が向上し、構造関数と方法の依存注入がサポートされます.
ParameterResolverは、拡張APIをテストするために使用され、実行時にパラメータを動的に解析できます.コンストラクション関数または@Test、@TestFactory、@BeforeEach、@AfterEach、@BeforeAllメソッドまたは@AfterAllメソッドがパラメータを受け入れる場合は、登録されたパラメータ解析器によって実行時にパラメータを解析する必要があります.
現在、3つの内蔵の解析器が自動的に登録されています.
TestInfoParameterResolver
メソッドパラメータがTestInfoタイプの場合、TestInfoParameterResolverは現在のテストに対応するTestInfoインスタンスをパラメータの値として提供します.その後、TestInfoは、テストの表示名、テストクラス、テストメソッド、または関連するタグなど、現在のテストに関する情報を取得するために使用することができる.DisplayNameは、技術名、例えばテストクラスまたはテストメソッドの名前、または
TestInfoはJUnit 4からのTestNameルールのdrop-inとして置き換えられる.
テストコンストラクタ@BeforeEachメソッドおよび@TestメソッドにTestInfoを注入する方法を以下に示す. TestInfoDemo.java
RepetitionInfoParameterResolver
@RepeatedTest、@BeforeEach、または@AfterEachメソッドのメソッドパラメータタイプがrepeat tioninfoの場合、repeat infoparameresolverはrepeat tioninfoインスタンスを提供します.重複情報は、現在の重複情報および対応する@RepeatedTestの重複回数を取得するために使用することができる.ただし、RepetitionInfoParameterResolverは
TestReporterParameterResolver
メソッド・パラメータがTestReporterタイプの場合、TestReporter ParameterResolverはTestReporterのインスタンスを提供します.TestReporterを使用して、現在のテスト実行に関する他のデータを公開できます.データはTestExecutionListener.reportingEntryPublished()で使用できますので、ideで表示またはレポートに含めることができます.
JUnit Jupiterでは、TestReporterを使用する必要があります.ここでは、JUnit 4のstdoutまたはstderrに情報を印刷できます.@RunWith(JUnitPlatform.class)を使用すると、すべてのレポートのエントリがstdoutに出力されます. TestReporterDemo.java
@ExtendWith
@ExtendWithで適切な拡張子を登録するには、他のパラメータ解析器を明示的に有効にする必要があります.
RandomParametersExtension
「RandomParametersExtension」を参照
その他
MockitoExtension
SpringExtention
シリーズナビゲーション
シリーズナビゲーション
以前のすべてのJUnitバージョンでは、コンストラクション関数またはメソッドのパラメータのテストは許可されていません(少なくとも標準のRunner実装は許可されていません).JUnit Jupiterの主な変化の1つとして,構造関数と方法のテストにパラメータが許可されるようになった.これにより、より柔軟性が向上し、構造関数と方法の依存注入がサポートされます.
ParameterResolverは、拡張APIをテストするために使用され、実行時にパラメータを動的に解析できます.コンストラクション関数または@Test、@TestFactory、@BeforeEach、@AfterEach、@BeforeAllメソッドまたは@AfterAllメソッドがパラメータを受け入れる場合は、登録されたパラメータ解析器によって実行時にパラメータを解析する必要があります.
現在、3つの内蔵の解析器が自動的に登録されています.
TestInfoParameterResolver
メソッドパラメータがTestInfoタイプの場合、TestInfoParameterResolverは現在のテストに対応するTestInfoインスタンスをパラメータの値として提供します.その後、TestInfoは、テストの表示名、テストクラス、テストメソッド、または関連するタグなど、現在のテストに関する情報を取得するために使用することができる.DisplayNameは、技術名、例えばテストクラスまたはテストメソッドの名前、または
@DisplayName
によって構成されたカスタム名であってもよい.TestInfoはJUnit 4からのTestNameルールのdrop-inとして置き換えられる.
テストコンストラクタ@BeforeEachメソッドおよび@TestメソッドにTestInfoを注入する方法を以下に示す.
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@DisplayName("TestInfo Demo")
public class TestInfoDemo {
TestInfoDemo(TestInfo testInfo) {
assertEquals("TestInfo Demo", testInfo.getDisplayName());
}
@BeforeEach
void init(TestInfo testInfo) {
String displayName = testInfo.getDisplayName();
assertTrue(displayName.equals("TEST 1") || displayName.equals("test2()"));
}
@Test
@DisplayName("TEST 1")
@Tag("my-tag")
void test1(TestInfo testInfo) {
assertEquals("TEST 1", testInfo.getDisplayName());
assertTrue(testInfo.getTags().contains("my-tag"));
}
@Test
void test2() {
}
}
RepetitionInfoParameterResolver
@RepeatedTest、@BeforeEach、または@AfterEachメソッドのメソッドパラメータタイプがrepeat tioninfoの場合、repeat infoparameresolverはrepeat tioninfoインスタンスを提供します.重複情報は、現在の重複情報および対応する@RepeatedTestの重複回数を取得するために使用することができる.ただし、RepetitionInfoParameterResolverは
@RepeatedTest
のコンテキストに登録されていないことに注意してください.TestReporterParameterResolver
メソッド・パラメータがTestReporterタイプの場合、TestReporter ParameterResolverはTestReporterのインスタンスを提供します.TestReporterを使用して、現在のテスト実行に関する他のデータを公開できます.データはTestExecutionListener.reportingEntryPublished()で使用できますので、ideで表示またはレポートに含めることができます.
JUnit Jupiterでは、TestReporterを使用する必要があります.ここでは、JUnit 4のstdoutまたはstderrに情報を印刷できます.@RunWith(JUnitPlatform.class)を使用すると、すべてのレポートのエントリがstdoutに出力されます.
import java.util.HashMap;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestReporter;
class TestReporterDemo {
@Test
void reportSingleValue(TestReporter testReporter) {
testReporter.publishEntry("a key", "a value");
}
@Test
void reportSeveralValues(TestReporter testReporter) {
HashMap values = new HashMap<>();
values.put("user name", "dk38");
values.put("award year", "1974");
testReporter.publishEntry(values);
}
}
@ExtendWith
@ExtendWithで適切な拡張子を登録するには、他のパラメータ解析器を明示的に有効にする必要があります.
RandomParametersExtension
「RandomParametersExtension」を参照
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@ExtendWith(RandomParametersExtension.class)
class MyRandomParametersTest {
@Test
void injectsInteger(@Random int i, @Random int j) {
assertNotEquals(i, j);
}
@Test
void injectsDouble(@Random double d) {
assertEquals(0.0, d, 1.0);
}
}
その他
MockitoExtension
SpringExtention
シリーズナビゲーション
シリーズナビゲーション