このドキュメントには、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.enabled
がtrue
に設定されている場合、Java モジュールとして使用できるようになりました。-
詳細については、issue #3561 を参照してください。
-
非推奨と破壊的変更
-
型階層を検索する際に、フィールド述語がすぐに適用されなくなりました。
-
これは、
ReflectionSupport
のfindFields(…)
およびstreamFields(…)
、ならびにAnnotationSupport
のfindAnnotatedFields(…)
およびfindAnnotatedFieldValues(…)
に影響を与えた 5.10.1 での変更を元に戻します。 -
詳細については、issue #3638 を参照してください。
-
-
型階層を検索する際に、メソッド述語がすぐに適用されなくなりました。
-
これは、
ReflectionSupport
のfindMethods(…)
およびstreamMethods(…)
、ならびにAnnotationSupport
のfindAnnotatedMethods(…)
に影響を与えた 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 を参照してください。
-
5.10.1
リリース日: 2023年11月5日
範囲: 5.10.0 以降の軽微なバグ修正と改善。
このリリースのクローズされたすべての issue と pull request の完全なリストについては、GitHub の JUnit リポジトリにある 5.10.1 マイルストーンページを参照してください。
JUnit Platform
バグ修正
-
型階層を検索する際に、フィールド述語が適用されるようになりました。これにより、
ReflectionSupport
のfindFields(…)
およびstreamFields(…)
、ならびにAnnotationSupport
のfindAnnotatedFields(…)
およびfindAnnotatedFieldValues(…)
のバグが修正されました。-
詳細については、issue 3532 を参照してください。
-
-
型階層を検索する際に、メソッド述語が適用されるようになりました。これにより、
ReflectionSupport
のfindMethods(…)
およびstreamMethods(…)
、ならびにAnnotationSupport
のfindAnnotatedMethods(…)
のバグが修正されました。-
詳細については、issue 3498 を参照してください。
-
JUnit Jupiter
バグ修正
-
@TempDir
でアノテーションされたパッケージプライベートな静的フィールドは、非静的フィールドが別のパッケージに存在し、静的フィールドと同じ名前を持っている場合、@TempDir
でアノテーションされた非静的フィールドによってシャドウされなくなりました。-
詳細については、issue 3532 を参照してください。
-
-
@BeforeAll
または@AfterAll
でアノテーションされたパッケージプライベートなクラスレベルのライフサイクルメソッドは、メソッドレベルのライフサイクルメソッドが別のパッケージに存在し、クラスレベルのライフサイクルメソッドと同じ名前を持っている場合、@BeforeEach
または@AfterEach
でアノテーションされたメソッドレベルのライフサイクルメソッドによってシャドウされなくなりました。-
詳細については、issue 3498 を参照してください。
-
-
@TempDir
のON_SUCCESS
クリーンアップモードは、クラスレベル(例: 静的フィールド)で宣言されている場合、テストメソッドとネストされたテストの失敗を考慮するようになりました。 -
ユーザーガイドの
RandomNumberExtension
の例が、Integer
型と非静的フィールドインジェクションを正しくサポートするように更新されました。
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-M1、5.10.0-RC1、5.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
およびNestedMethodSelector
のgetMethodParameterTypes()
メソッドは非推奨となり、より明確にするためにgetParameterTypeNames()
に置き換えられました。
新機能と改善点
-
ModuleSelector
、EngineDiscoveryListener
、EngineDiscoveryRequestResolver
、LauncherSession
、LauncherSessionListener
、並列実行サポートクラス、@Suite
および関連アノテーションなど、さまざまな「実験的」API が「安定」に昇格しました。 -
List
を返すReflectionSupport
のすべてのユーティリティメソッドに、Stream
を返す対応するメソッドが追加されました。 -
明示的な
ClassLoader
を受け入れる、ReflectionSupport
の新しいtryToLoadClass(…)
バリアント。これにより、カスタムのClassLoader
配置を使用してクラスを解決できます。 -
ReflectionSupport.findMethod(Class<?>, String, String)
は、デフォルトのClassLoader
を使用する代わりに、指定されたClass
のClassLoader
を使用してパラメーター型をロードするようになりました。これにより、パラメーター型をカスタムのClassLoader
配置(OSGi など)で解決できます。その結果、DiscoverySelectors.selectMethod(Class<?>, String, String)
も、カスタムのClassLoader
配置で正しく機能するようになりました。 -
@Suite
テストエンジンでの新しい@SelectMethod
セレクターサポート。 -
クラスは、
@SelectClasses
のnames
属性を使用して、完全修飾名で選択できるようになりました。 -
ClassSelector
、NestedClassSelector
、MethodSelector
、およびNestedMethodSelector
の新しいオーバーロードされたコンストラクター。明示的なClassLoader
をパラメーターとして受け取り、セレクターが OSGi のようなカスタムClassLoader
配置でクラスを選択できるようにします。 -
パラメーター型の名前をコンマ区切りの文字列として提供する代わりに、型安全な代替としてパラメーター型の
Class<?>…
引数を受け入れる、DiscoverySelectors
の新しいselectMethod()
およびselectNestedMethod()
バリアント。 -
JUnit Jupiter ライフサイクルコールバックとの整合性を保つために、開始/終了イベントとオープン/クローズイベントのリスナーメソッドペアが、「ラッピング」セマンティクスを使用して呼び出されるようになりました。これは、複数のリスナーが登録されている場合、終了/クローズイベントメソッドが、対応する開始/オープンイベントメソッドと比較して逆順で呼び出されることを意味します。これは、次のリスナーインターフェースに影響します:
TestExecutionListener
、EngineExecutionListener
、LauncherDiscoveryListener
、およびLauncherSessionListener
。 -
Launcher
およびLauncherSessionlistener
のインスタンスの作成、ならびに前者のdiscover
およびexecute
メソッドの呼び出しをインターセプトするための新しいLauncherInterceptor
SPI。詳細については、ユーザーガイドを参照してください。 -
構成パラメーターを介して並列実行の
max-pool-size-factor
を制限するためのサポート。 -
簡潔な形式でテスト実行イベントが発生したときに印刷する、
ConsoleLauncher
の新しいtestfeed
詳細モード。 -
ConsoleLauncher
の既存の機能が、テストを実行するためのexecute
と、登録されたテストエンジンを一覧表示するためのengines
の 2 つのサブコマンドに分割されました。 -
指定された詳細モードで検出されたテストを実行せずに印刷するために、新しい
discover
サブコマンドがConsoleLauncher
に追加されました。 -
より実用的なテスト検出中に検出された循環グラフの改善されたエラーメッセージ。
-
他のテストエンジンとその拡張機能で再利用するために、JUnit Jupiter エンジンから
NamespacedHierarchicalStore
を抽出しました。 -
実際にテストを実行せずにテスト実行をシミュレートする新しいドライランモード。詳細については、ユーザーガイドを参照してください。
-
失敗したテストによって生成されたスタックトレースから、
org.junit
、jdk.internal.reflect
、およびsun.reflect
パッケージからの呼び出しがプルーニングされるようになりました。この機能は、構成パラメーターで無効にできます。詳細については、ユーザーガイドを参照してください。 -
TestDescriptor
の新しいgetAncestors()
メソッド。
JUnit Jupiter
バグ修正
-
@MethodSource
、@EnabledIf
、および@DisabledIf
をサポートする拡張機能は、可能な場合は常に、テストクラスから取得したClassLoader
を使用して、完全修飾クラス名でクラスをロードするようになりました。これにより、クラスをカスタムのClassLoader
配置(OSGi など)で解決できます。 -
@ParameterizedTest
メソッドの引数を完全修飾クラス名 (String
) からClass
に変換する際、デフォルトのClassLoader
の代わりに、@ParameterizedTest
メソッドが宣言されているクラスのClassLoader
がClass
の解決に使用されるようになりました。
非推奨と破壊的変更
-
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
は、失敗回数が指定されたしきい値を超えた場合に、残りの繰り返しを自動的にスキップするように設定できるようになりました。詳細は ユーザーガイド を参照してください。 -
@MethodSource
がstatic
であるべき非静的ファクトリメソッドで使用されている場合、スローされる例外は、問題に対処する方法に関する意味のある説明をユーザーに提供するようになりました。 -
@EmptySource
は、引数なしの公開コンストラクタを持つCollection
およびMap
サブタイプを含む、追加の型をサポートするようになりました。 -
@ParameterizedTest
呼び出しのインデックスを提供する新しいArgumentsAccessor.getInvocationIndex()
メソッド。 -
ArgumentsProvider
とAnnotationConsumer
の両方を実装する便利な基本クラスである新しいAnnotationBasedArgumentsProvider
。 -
ArgumentConverter
とAnnotationConsumer
の両方を実装する便利な基本クラスである新しいAnnotationBasedArgumentConverter
。 -
カスタムの*複合アノテーション*を作成するために、
@TempDir
をメタアノテーションとして使用できるようになりました。詳細は、ユーザーガイド の@JimfsTempDir
の例を参照してください。 -
@TempDir
は、読み取り専用に設定されている Windows 上のファイルとディレクトリを正常にクリーンアップするようになりました。 -
@TempDir
拡張機能が一時ディレクトリを作成する方法をカスタマイズするための新しいTempDirFactory
SPI。詳細は ユーザーガイド を参照してください。 -
ユーザーガイド に、フィールド上の
@ExtendWith
を介した拡張機能登録のドキュメントを改善するために、RandomNumberExtension
の実装例が含まれるようになりました。 -
TestWatcher
実装の適用範囲が、ユーザーガイドと Javadoc でより広範に文書化されました。 -
DisplayNameGenerator
メソッドは、デフォルトの表示名ジェネレータにフォールバックするように指示するために、null
を返すことができるようになりました。
5.9.3
リリース日: 2023年4月26日
範囲: 5.9.2 以降のバグ修正と機能強化
このリリースの*クローズ済*のすべての課題とプルリクエストの完全なリストについては、GitHub の JUnit リポジトリの 5.9.3 マイルストーンページを参照してください。
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
可視性を使用することは強く推奨されず、将来のリリースで許可されなくなります。
5.9.2
リリース日: 2023年1月10日
範囲: 5.9.1 以降のバグ修正と機能強化
このリリースの*クローズ済*のすべての課題とプルリクエストの完全なリストについては、GitHub の JUnit リポジトリの 5.9.2 マイルストーンページを参照してください。
JUnit Platform
5.9.1
リリース日: 2022年9月20日
範囲
-
GraalVM ネイティブイメージでテストするための新しい
@EnabledInNativeImage
および@DisabledInNativeImage
アノテーション。 -
5.9.0 以降の軽微なバグ修正と機能強化
このリリースの*クローズ済*のすべての課題とプルリクエストの完全なリストについては、GitHub の JUnit リポジトリの 5.9.1 マイルストーンページを参照してください。
JUnit Jupiter
バグ修正
-
useHeadersInDisplayName
属性がtrue
に設定されている場合、@ParameterizedTest
の@CsvSource
のvalue
属性を介して提供されるヘッダーが正しく解析されるようになりました。 -
複数のインターフェイスから継承されたファクトリメソッドを参照する
@MethodSource
アノテーションで設定された@ParameterizedTest
メソッドが、同じ名前の複数のファクトリメソッドが見つかったことを示す例外で失敗しなくなりました。 -
同じクラス内の他の非ファクトリメソッドと同じ名前のファクトリメソッドを参照する
@MethodSource
アノテーションで設定された@ParameterizedTest
メソッドが、同じ名前の複数のファクトリメソッドが見つかったことを示す例外で失敗しなくなりました。 -
ThreadMode.SEPARATE
を使用してタイムアウトが適用されたメソッドからスローされたアサーションの失敗が、正しくレポートされるようになりました。
5.9.0
リリース日: 2022年7月26日
範囲
-
新しい Open Test Reporting 形式の XML レポート
-
@TempDir
の設定可能なクリーンアップモード -
@Timeout
の設定可能なスレッドモード -
OSアーキテクチャに基づいた条件付き実行
-
新しい
TestInstancePreConstructCallback
拡張API -
ExecutableInvoker
を介したカスタム拡張メソッドの再利用可能なパラメータ解決 -
@MethodSource
メソッドのパラメータインジェクション -
新しい
IterationSelector
-
ConsoleLauncher
の様々な改善 -
多数のバグ修正と軽微な改善
詳細は、オンラインの 5.9.0 リリースノート を参照してください。