@RegisterExtensionを使用したJUnit5プログラムによる拡張登録
1. 概要
JUnit 5は、拡張機能を登録するための複数のメソッドを提供します。 これらのメソッドのいくつかの概要については、JUnit5拡張機能ガイドを参照してください。
このクイックチュートリアルでは、 @RegisterExtension アノテーションを使用した、JUnit5拡張機能のプログラムによる登録に焦点を当てます。
2. @RegisterExtension
このアノテーションをテストクラスのフィールドに適用できます。
JUnitは、適切な段階で拡張メソッドを呼び出します。
たとえば、拡張機能が BeforeEachCallbackを実装している場合、 JUnitは、テストメソッドを実行する前に対応するインターフェイスメソッドを呼び出します。
3. 静的フィールドでの@RegisterExtensionの使用
静的フィールドで使用する場合、JUnitは、クラスレベルの @ExtendWith ベースの拡張機能が適用された後、この拡張機能のメソッドを適用します。
また、JUnitは、拡張機能のクラスレベルとメソッドレベルの両方のコールバックを呼び出します。
たとえば、次の拡張機能は、beforeAllとbeforeEachの両方の実装を備えています。
public class LoggingExtension implements
BeforeAllCallback, BeforeEachCallback {
// logger, constructor etc
@Override
public void beforeAll(ExtensionContext extensionContext)
throws Exception {
logger.info("Type {} In beforeAll : {}",
type, extensionContext.getDisplayName());
}
@Override
public void beforeEach(ExtensionContext extensionContext) throws Exception {
logger.info("Type {} In beforeEach : {}",
type, extensionContext.getDisplayName());
}
public String getType() {
return type;
}
}
この拡張機能をテストの静的フィールドに適用してみましょう。
public class RegisterExtensionTest {
@RegisterExtension
static LoggingExtension staticExtension = new LoggingExtension("static version");
@Test
public void demoTest() {
// assertions
}
}
出力には、beforeAllメソッドとbeforeEachメソッドの両方からのメッセージが表示されます。
Type static version In beforeAll : RegisterExtensionTest
Type static version In beforeEach : demoTest()
4. インスタンスフィールドでの@RegisterExtensionの使用
非静的フィールドでRegisterExtensionを使用する場合、JUnitはすべてのTestInstancePostProcessorコールバックを処理した後にのみ拡張機能を適用します。
この場合、JUnitはbeforeAllのようなクラスレベルのコールバックを無視します。
上記の例では、static修飾子をLoggingExtensionから削除しましょう。
@RegisterExtension
LoggingExtension instanceLevelExtension = new LoggingExtension("instance version");
これで、出力に示されているように、JUnitはbeforeEachメソッドのみを呼び出します。
Type instance version In beforeEach : demoTest()
5. 結論
この記事では、JUnit5拡張機能を@RegisterExtensionにプログラムで登録する方法の概要を説明しました。
また、静的フィールドに拡張を適用することと、静的フィールドに拡張を適用することの違いについても説明しました。 インスタンスフィールド。
いつものように、コード例はGithubリポジトリにあります。