このドキュメントには、5.9 GA 以降のすべての JUnit 5 リリースの変更ログが含まれています。

テストを作成するプログラマー、拡張機能の作成者、エンジン作成者、およびビルドツールや IDE ベンダー向けの包括的なリファレンスドキュメントについては、ユーザーガイドを参照してください。

5.10.2

リリース日: 2024年2月4日

範囲: 5.10.1 以降の軽微なバグ修正と変更。

このリリースのクローズされたすべての issue と pull request の完全なリストについては、GitHub の JUnit リポジトリにある 5.10.2 マイルストーンページを参照してください。

JUnit Platform

バグ修正

  • junit-platform-launcher は、junit.platform.launcher.interceptors.enabledtrue に設定されている場合、Java モジュールとして使用できるようになりました。

    • 詳細については、issue #3561 を参照してください。

非推奨と破壊的変更

  • 型階層を検索する際に、フィールド述語がすぐに適用されなくなりました。

    • これは、ReflectionSupportfindFields(…​) および streamFields(…​)、ならびに AnnotationSupportfindAnnotatedFields(…​) および findAnnotatedFieldValues(…​) に影響を与えた 5.10.1 での変更を元に戻します。

    • 詳細については、issue #3638 を参照してください。

  • 型階層を検索する際に、メソッド述語がすぐに適用されなくなりました。

    • これは、ReflectionSupportfindMethods(…​) および streamMethods(…​)、ならびに AnnotationSupportfindAnnotatedMethods(…​) に影響を与えた 5.10.1 での変更を元に戻します。

    • 詳細については、issue #3600 を参照してください。

JUnit Jupiter

バグ修正

  • JUnit Jupiter は、サブクラスで @Test メソッドがオーバーライドされたときに、再び正しく検出するようになりました。

    • 詳細については、issue #3600 を参照してください。

非推奨と破壊的変更

  • @TempDir でアノテーションされたパッケージプライベートな静的フィールドは、非静的フィールドが別のパッケージに存在し、静的フィールドと同じ名前を持っている場合、@TempDir でアノテーションされた非静的フィールドによって再びシャドウされます。

    • これは、5.10.1 で行われた変更を元に戻します。

    • 詳細については、issue #3638 を参照してください。

  • @BeforeAll または @AfterAll でアノテーションされたパッケージプライベートなクラスレベルのライフサイクルメソッドは、メソッドレベルのライフサイクルメソッドが別のパッケージに存在し、クラスレベルのライフサイクルメソッドと同じ名前を持っている場合、@BeforeEach または @AfterEach でアノテーションされたメソッドレベルのライフサイクルメソッドによって再びシャドウされます。

    • これは、5.10.1 で行われた変更を元に戻します。

    • 詳細については、issue #3600 を参照してください。

JUnit Vintage

変更なし。

5.10.1

リリース日: 2023年11月5日

範囲: 5.10.0 以降の軽微なバグ修正と改善。

このリリースのクローズされたすべての issue と pull request の完全なリストについては、GitHub の JUnit リポジトリにある 5.10.1 マイルストーンページを参照してください。

JUnit Platform

バグ修正

  • 型階層を検索する際に、フィールド述語が適用されるようになりました。これにより、ReflectionSupportfindFields(…​) および streamFields(…​)、ならびに AnnotationSupportfindAnnotatedFields(…​) および findAnnotatedFieldValues(…​) のバグが修正されました。

    • 詳細については、issue 3532 を参照してください。

  • 型階層を検索する際に、メソッド述語が適用されるようになりました。これにより、ReflectionSupportfindMethods(…​) および streamMethods(…​)、ならびに AnnotationSupportfindAnnotatedMethods(…​) のバグが修正されました。

    • 詳細については、issue 3498 を参照してください。

JUnit Jupiter

バグ修正

  • @TempDir でアノテーションされたパッケージプライベートな静的フィールドは、非静的フィールドが別のパッケージに存在し、静的フィールドと同じ名前を持っている場合、@TempDir でアノテーションされた非静的フィールドによってシャドウされなくなりました。

    • 詳細については、issue 3532 を参照してください。

  • @BeforeAll または @AfterAll でアノテーションされたパッケージプライベートなクラスレベルのライフサイクルメソッドは、メソッドレベルのライフサイクルメソッドが別のパッケージに存在し、クラスレベルのライフサイクルメソッドと同じ名前を持っている場合、@BeforeEach または @AfterEach でアノテーションされたメソッドレベルのライフサイクルメソッドによってシャドウされなくなりました。

    • 詳細については、issue 3498 を参照してください。

  • @TempDirON_SUCCESS クリーンアップモードは、クラスレベル(例: 静的フィールド)で宣言されている場合、テストメソッドとネストされたテストの失敗を考慮するようになりました。

  • ユーザーガイドRandomNumberExtension の例が、Integer 型と非静的フィールドインジェクションを正しくサポートするように更新されました。

新機能と改善点

  • スレッド割り込みに関する Assertions.assertTimeoutPreemptively の Javadoc が改善されました。

  • @Disabled および条件付きアノテーションのドキュメントで、そのようなアノテーションはサブクラスに継承されないことを明示的に説明するようになりました。

JUnit Vintage

バグ修正

  • JUnit 4 の @Ignored アノテーションを使用する JUnit 3 テストクラスのレポートが修正されました。

5.10.0

リリース日: 2023年7月23日

範囲

  • さまざまな実験的な API の安定版への昇格

  • 新しい LauncherInterceptor SPI

  • ConsoleLauncher の新しい testfeed 詳細モード

  • 実行せずにテストを検出するための新しい ConsoleLauncher サブコマンド

  • テスト実行のドライランモード

  • サードパーティのテストエンジンで使用するための新しい NamespacedHierarchicalStore

  • JUnit 内部呼び出しを非表示にするスタックトレースのプルーニング

  • テスト @Suite クラスでの新しい @SelectMethod サポート。

  • 一時ディレクトリの作成方法をカスタマイズするための新しい TempDirFactory SPI

  • @RepeatedTest の失敗しきい値

  • ArgumentsProvider および ArgumentConverter を実装するための新しい便利な基本クラス

  • クラス/メソッドセレクター、@MethodSource@EnabledIf、および @DisabledIf のカスタムクラスローダーサポート

  • 並列実行の構成可能性の向上

  • 多数のバグ修正と軽微な改善

このリリースのクローズされたすべての issue と pull request の完全なリストについては、GitHub の JUnit リポジトリにある 5.10.0-M15.10.0-RC15.10.0-RC2、および 5.10.0 GA マイルストーンページを参照してください。

JUnit Platform

非推奨と破壊的変更

  • GraalVM でネイティブイメージをビルドするには、ビルド引数 --initialize-at-build-time=org.junit.platform.launcher.core.LauncherConfig および --initialize-at-build-time=org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter を構成する必要があるようになりました。

  • MethodSelector および NestedMethodSelectorgetMethodParameterTypes() メソッドは非推奨となり、より明確にするために getParameterTypeNames() に置き換えられました。

新機能と改善点

  • ModuleSelectorEngineDiscoveryListenerEngineDiscoveryRequestResolverLauncherSessionLauncherSessionListener、並列実行サポートクラス、@Suite および関連アノテーションなど、さまざまな「実験的」API が「安定」に昇格しました。

  • List を返す ReflectionSupport のすべてのユーティリティメソッドに、Stream を返す対応するメソッドが追加されました。

  • 明示的な ClassLoader を受け入れる、ReflectionSupport の新しい tryToLoadClass(…​) バリアント。これにより、カスタムの ClassLoader 配置を使用してクラスを解決できます。

  • ReflectionSupport.findMethod(Class<?>, String, String) は、デフォルトClassLoader を使用する代わりに、指定された ClassClassLoader を使用してパラメーター型をロードするようになりました。これにより、パラメーター型をカスタムの ClassLoader 配置(OSGi など)で解決できます。その結果、DiscoverySelectors.selectMethod(Class<?>, String, String) も、カスタムの ClassLoader 配置で正しく機能するようになりました。

  • @Suite テストエンジンでの新しい @SelectMethod セレクターサポート。

  • クラスは、@SelectClassesnames 属性を使用して、完全修飾名で選択できるようになりました。

  • ClassSelectorNestedClassSelectorMethodSelector、および NestedMethodSelector の新しいオーバーロードされたコンストラクター。明示的な ClassLoader をパラメーターとして受け取り、セレクターが OSGi のようなカスタム ClassLoader 配置でクラスを選択できるようにします。

  • パラメーター型の名前をコンマ区切りの文字列として提供する代わりに、型安全な代替としてパラメーター型の Class<?>…​ 引数を受け入れる、DiscoverySelectors の新しい selectMethod() および selectNestedMethod() バリアント。

  • JUnit Jupiter ライフサイクルコールバックとの整合性を保つために、開始/終了イベントとオープン/クローズイベントのリスナーメソッドペアが、「ラッピング」セマンティクスを使用して呼び出されるようになりました。これは、複数のリスナーが登録されている場合、終了/クローズイベントメソッドが、対応する開始/オープンイベントメソッドと比較して逆順で呼び出されることを意味します。これは、次のリスナーインターフェースに影響します: TestExecutionListenerEngineExecutionListenerLauncherDiscoveryListener、および LauncherSessionListener

  • Launcher および LauncherSessionlistener のインスタンスの作成、ならびに前者の discover および execute メソッドの呼び出しをインターセプトするための新しい LauncherInterceptor SPI。詳細については、ユーザーガイドを参照してください。

  • 構成パラメーターを介して並列実行の max-pool-size-factor を制限するためのサポート。

  • 簡潔な形式でテスト実行イベントが発生したときに印刷する、ConsoleLauncher の新しい testfeed 詳細モード。

  • ConsoleLauncher の既存の機能が、テストを実行するための execute と、登録されたテストエンジンを一覧表示するための engines の 2 つのサブコマンドに分割されました。

  • 指定された詳細モードで検出されたテストを実行せずに印刷するために、新しい discover サブコマンドが ConsoleLauncher に追加されました。

  • より実用的なテスト検出中に検出された循環グラフの改善されたエラーメッセージ。

  • 他のテストエンジンとその拡張機能で再利用するために、JUnit Jupiter エンジンから NamespacedHierarchicalStore を抽出しました。

  • 実際にテストを実行せずにテスト実行をシミュレートする新しいドライランモード。詳細については、ユーザーガイドを参照してください。

  • 失敗したテストによって生成されたスタックトレースから、org.junitjdk.internal.reflect、および sun.reflect パッケージからの呼び出しがプルーニングされるようになりました。この機能は、構成パラメーターで無効にできます。詳細については、ユーザーガイドを参照してください。

  • TestDescriptor の新しい getAncestors() メソッド。

JUnit Jupiter

バグ修正

  • @MethodSource@EnabledIf、および @DisabledIf をサポートする拡張機能は、可能な場合は常に、テストクラスから取得した ClassLoader を使用して、完全修飾クラス名でクラスをロードするようになりました。これにより、クラスをカスタムの ClassLoader 配置(OSGi など)で解決できます。

  • @ParameterizedTest メソッドの引数を完全修飾クラス名 (String) から Class に変換する際、デフォルトClassLoader の代わりに、@ParameterizedTest メソッドが宣言されているクラスの ClassLoaderClass の解決に使用されるようになりました。

非推奨と破壊的変更

  • dynamic 並列実行戦略では、デフォルトでスレッドプールが飽和できるようになりました。

  • @CsvSource におけるブール値の暗黙的な型変換がより厳密になり、意図しないミスを明確にし、潜在的な混乱を避けるために、"true" または "false" (大文字と小文字を区別しない) の値のみを許可するようになりました。

新機能と改善点

  • MethodOrderer, ClassOrderer, InvocationInterceptor, LifecycleMethodExecutionExceptionHandler, @TempDir, 並列実行アノテーションなど、さまざまな「実験的」API が「安定版」に昇格しました。

  • JRE ベースの実行条件で使用するために、JRE 列挙型に JAVA_22 が追加されました。

  • 選択した実行モードを使用する理由を文書化するために使用できる、@Execution に新しい reason 属性が追加されました。

  • 最大プールサイズ係数を設定するための新しい junit.jupiter.execution.parallel.config.dynamic.max-pool-size-factor 設定パラメータ。

  • プール飽和を無効にするための新しい junit.jupiter.execution.parallel.config.dynamic.saturate 設定パラメータ。

  • @RepeatedTest は、失敗回数が指定されたしきい値を超えた場合に、残りの繰り返しを自動的にスキップするように設定できるようになりました。詳細は ユーザーガイド を参照してください。

  • @MethodSourcestatic であるべき非静的ファクトリメソッドで使用されている場合、スローされる例外は、問題に対処する方法に関する意味のある説明をユーザーに提供するようになりました。

  • @EmptySource は、引数なしの公開コンストラクタを持つ Collection および Map サブタイプを含む、追加の型をサポートするようになりました。

  • @ParameterizedTest 呼び出しのインデックスを提供する新しい ArgumentsAccessor.getInvocationIndex() メソッド。

  • ArgumentsProviderAnnotationConsumer の両方を実装する便利な基本クラスである新しい AnnotationBasedArgumentsProvider

  • ArgumentConverterAnnotationConsumer の両方を実装する便利な基本クラスである新しい AnnotationBasedArgumentConverter

  • カスタムの*複合アノテーション*を作成するために、@TempDir をメタアノテーションとして使用できるようになりました。詳細は、ユーザーガイド@JimfsTempDir の例を参照してください。

  • @TempDir は、読み取り専用に設定されている Windows 上のファイルとディレクトリを正常にクリーンアップするようになりました。

  • @TempDir 拡張機能が一時ディレクトリを作成する方法をカスタマイズするための新しい TempDirFactory SPI。詳細は ユーザーガイド を参照してください。

  • ユーザーガイド に、フィールド上の @ExtendWith を介した拡張機能登録のドキュメントを改善するために、RandomNumberExtension の実装例が含まれるようになりました。

  • TestWatcher 実装の適用範囲が、ユーザーガイドと Javadoc でより広範に文書化されました。

  • DisplayNameGenerator メソッドは、デフォルトの表示名ジェネレータにフォールバックするように指示するために、null を返すことができるようになりました。

JUnit Vintage

変更なし。

5.9.3

リリース日: 2023年4月26日

範囲: 5.9.2 以降のバグ修正と機能強化

このリリースの*クローズ済*のすべての課題とプルリクエストの完全なリストについては、GitHub の JUnit リポジトリの 5.9.3 マイルストーンページを参照してください。

JUnit Platform

変更なし。

JUnit Jupiter

バグ修正

  • ローカル @MethodSource ファクトリメソッド名のパラメータ型が検証されるようになりました。たとえば、@MethodSource("myFactory(example.NonexistentType)") は、example.NonexistentType を有効な型に解決できないことを示す例外が発生するようになりました。

  • ローカル @MethodSource ファクトリメソッド名のパラメータ型の構文が、正規配列名をサポートするようになりました。たとえば、@MethodSource("myFactory([I)") (すでにサポートされていた) のように *バイナリ* 名ではなく、@MethodSource("myFactory(int[])") のように int[] を指定できるようになりました。また、@MethodSource("myFactory([Ljava.lang.String;)") の代わりに、@MethodSource("myFactory(java.lang.String[])") と指定できます。

  • @MethodSource ファクトリメソッドを見つけるために使用される検索アルゴリズムが、オーバーロードされたファクトリメソッドの *ローカル* 修飾メソッド名と完全修飾メソッド名に対して一貫したセマンティクスを適用するようになりました。

  • @ParameterizedTest 呼び出し名の {displayName} プレースホルダーは、java.text.MessageFormat を使用して解析されなくなりました。その結果、@ParameterizedTest メソッドの表示名内のテキストは、呼び出し表示名で変更されずに含まれるようになります。たとえば、Kotlin メソッド名や、@DisplayName で設定されたカスタム表示名には、アポストロフィ (') や {0}{data} などの MessageFormat 要素に似たテキストを含めることができるようになりました。

  • @TempDir を介して作成された一時ディレクトリをクリーンアップする際に、削除できないファイルに対してスローされる例外に、根本原因が含まれるようになりました。

  • ライフサイクルメソッドは、後方互換性のために再び private として宣言できます。ただし、ライフサイクルメソッドに private 可視性を使用することは強く推奨されず、将来のリリースで許可されなくなります。

新機能と改善点

  • @MethodSource ファクトリメソッドを見つけるために使用される検索アルゴリズムは、修飾名 (パラメータリストなし) でファクトリメソッドが見つからない場合に、寛容な検索セマンティクスにフォールバックするようになり、一意のファクトリメソッドが見つからない場合に、より良い診断を提供します。

JUnit Vintage

変更なし。

5.9.2

リリース日: 2023年1月10日

範囲: 5.9.1 以降のバグ修正と機能強化

このリリースの*クローズ済*のすべての課題とプルリクエストの完全なリストについては、GitHub の JUnit リポジトリの 5.9.2 マイルストーンページを参照してください。

JUnit Platform

バグ修正

  • 無効な ParallelExecutionConfiguration が提供された場合、Java 7 ベースの ForkJoinPool のコンストラクタが Java 9 以上で誤って使用されなくなりました。代わりに、無効な構成に対して例外がスローされ、無効な構成がサイレントに無視されるのを防ぎます。

新機能と改善点

  • テスト実行中に一意の ID を不必要に解析しないようにする、新しい TestPlan.getTestIdentifier(UniqueId) および TestPlan.getChildren(UniqueId) メソッド。

  • 設定パラメータを介した並列実行の max-pool-size の制限のサポート。

  • スイート検出は、テストスイートで発生したサイクルを無視し、例外をスローする代わりに、CONFIG レベルで情報メッセージをログに記録するようになりました。

JUnit Jupiter

バグ修正

  • 完全修飾名を指定せずに、オーバーロードされたローカルファクトリメソッドを明示的に選択するための新しい @MethodSource 構文。

非推奨と破壊的変更

  • fixed 並列実行戦略では、デフォルトでスレッドプールが飽和できるようになりました。

新機能と改善点

  • JRE ベースの実行条件で使用するために、JRE 列挙型に JAVA_21 が追加されました。

  • 最大プールサイズを設定するための新しい junit.jupiter.execution.parallel.config.fixed.max-pool-size 設定パラメータ。

  • プール飽和を無効にするための新しい junit.jupiter.execution.parallel.config.fixed.saturate 設定パラメータ。

JUnit Vintage

バグ修正

  • Parameterized テストが Enclosed ランナーと組み合わせて使用された場合に、正しくレポートされるようになりました。

5.9.1

リリース日: 2022年9月20日

範囲

  • GraalVM ネイティブイメージでテストするための新しい @EnabledInNativeImage および @DisabledInNativeImage アノテーション。

  • 5.9.0 以降の軽微なバグ修正と機能強化

このリリースの*クローズ済*のすべての課題とプルリクエストの完全なリストについては、GitHub の JUnit リポジトリの 5.9.1 マイルストーンページを参照してください。

JUnit Platform

バグ修正

  • ReflectionSupport.findMethods(…​) は、メソッドの異なるセットを返すようになりました。

  • GraalVM ネイティブイメージでの実行では、OpenTestReportGeneratingListener に対して --initialize-at-build-time が不要になりました。

JUnit Jupiter

バグ修正

  • useHeadersInDisplayName 属性が true に設定されている場合、@ParameterizedTest@CsvSourcevalue 属性を介して提供されるヘッダーが正しく解析されるようになりました。

  • 複数のインターフェイスから継承されたファクトリメソッドを参照する @MethodSource アノテーションで設定された @ParameterizedTest メソッドが、同じ名前の複数のファクトリメソッドが見つかったことを示す例外で失敗しなくなりました。

  • 同じクラス内の他の非ファクトリメソッドと同じ名前のファクトリメソッドを参照する @MethodSource アノテーションで設定された @ParameterizedTest メソッドが、同じ名前の複数のファクトリメソッドが見つかったことを示す例外で失敗しなくなりました。

  • ThreadMode.SEPARATE を使用してタイムアウトが適用されたメソッドからスローされたアサーションの失敗が、正しくレポートされるようになりました。

新機能と改善点

  • GraalVM ネイティブイメージ内でテストを有効および無効にするための新しい @EnabledInNativeImage および @DisabledInNativeImage アノテーション。

JUnit Vintage

変更なし。

5.9.0

リリース日: 2022年7月26日

範囲

  • 新しい Open Test Reporting 形式の XML レポート

  • @TempDir の設定可能なクリーンアップモード

  • @Timeout の設定可能なスレッドモード

  • OSアーキテクチャに基づいた条件付き実行

  • 新しい TestInstancePreConstructCallback 拡張API

  • ExecutableInvoker を介したカスタム拡張メソッドの再利用可能なパラメータ解決

  • @MethodSource メソッドのパラメータインジェクション

  • 新しい IterationSelector

  • ConsoleLauncher の様々な改善

  • 多数のバグ修正と軽微な改善

詳細は、オンラインの 5.9.0 リリースノート を参照してください。