本文檔包含自 5.11 GA 以來所有 JUnit 5 版本的變更日誌。
關於程式設計師編寫測試、擴充功能作者和引擎作者以及建置工具和 IDE 供應商的綜合參考文檔,請參閱使用者指南。
5.12.0
發行日期: 2025 年 2 月 21 日
範圍
-
測試和容器的輸出檔案附件
-
Open Test Reporting XML 輸出的改進
-
資源鎖定定義改進
-
測試超時時的線程轉儲
-
參數化測試驗證改進
-
自動註冊擴充功能的篩選支援
-
Kotlin 斷言的契約
-
可配置的 Jupiter 擴充功能上下文範圍
-
ConsoleLauncher
的增強功能 -
更好地支援 GraalVM 原生映像檔的使用
-
改進對基於檔案的測試引擎的發現支援
-
可自訂的類路徑掃描
-
JUnit Vintage 引擎中的並行執行支援
-
眾多錯誤修復和其他增強功能
有關此版本所有已關閉問題和提取請求的完整列表,請查閱 GitHub 上 JUnit 儲存庫中的 5.12.0-M1、5.12.0-RC1、5.12.0-RC2 和 5.12.0 里程碑頁面。
JUnit 平台
棄用和重大變更
-
來自
junit-platform-commons
的SearchOption
和AnnotationSupport.findAnnotation(Class, Class, SearchOption)
已被棄用。
新功能和改進
-
ConsoleLauncher
現在接受所有--select
選項的多個值。 -
ConsoleLauncher
現在支援--select-unique-id
選項,以按唯一 ID 選取容器和測試。 -
ConsoleLauncher
支援新的--exclude-methodname
和--include-methodname
選項,以根據不帶參數的完整限定方法名稱包含或排除方法。例如,--exclude-methodname=^org\.example\..+#methodname
將排除org.example
套件下所有名為methodName
的方法。 -
ConsoleLauncher
的--select-file
和--select-resource
選項現在支援行號和列號。 -
新的
ReflectionSupport.makeAccessible(Field)
公用程式方法,供第三方使用,而不是直接呼叫內部ReflectionUtils.makeAccessible(Field)
方法。 -
ReflectionSupport.tryToLoadClass(…)
公用程式方法現在支援查詢"void"
偽類型,這間接支援 JUnit Jupiter 中參數化測試中"void"
的String
到Class
轉換。 -
EngineDiscoveryRequestResolver.Builder
中的新addResourceContainerSelectorResolver()
方法,支援發現基於類路徑資源的測試,類似於現有的addClassContainerSelectorResolver()
方法。 -
EngineDiscoveryRequest
和TestPlan
中的新getOutputDirectoryProvider()
方法,允許測試引擎透過呼叫EngineExecutionListener.fileEntryPublished(…)
將檔案發佈/附加到容器和測試。然後,已註冊的TestExecutionListeners
可以透過覆寫fileEntryPublished(…)
方法來存取這些檔案。 -
已對 Open Test Reporting XML 輸出進行了以下改進
-
如果適用,XML 報告現在包含有關 Git 儲存庫、目前分支、提交雜湊和目前工作樹狀態的資訊。
-
當新增到類路徑/模組路徑時,open-test-reporting 現在會將包含每個測試/容器的 JUnit 特定元數據的部分寫入 HTML 報告
-
有關已發佈檔案的資訊現在包含為附件。
-
如果啟用輸出擷取,則寫入
System.out
和System.err
的擷取輸出現在包含在 XML 報告中。
-
-
從非測試線程寫入到
System.out
和System.err
的輸出現在歸因於已啟動或已寫入輸出的最新測試或容器。 -
新的公共介面
ClasspathScanner
,允許第三方為掃描類路徑以尋找類別和資源提供自訂實作。 -
新的
AnnotationSupport.findAnnotation(Class, Class, List)
方法,支援在內部類別及其運行時封閉實例類型上搜尋註解。 -
新的
TestDescriptor.orderChildren(UnaryOperator<List<TestDescriptor>> orderer)
方法,用於就地排序子項
JUnit Jupiter
錯誤修復
-
向
DisplayNameGenerator
實作提供@Nested
測試類別和包含的測試方法的運行時封閉類型。在此變更之前,此類產生器只能存取宣告@Nested
的封閉類別,但它們無法存取封閉實例的具體運行時類型。 -
現在在
@Nested
測試類別的運行時封閉類型上發現@DisplayNameGeneration
註解,而不是在宣告@Nested
類別的編譯時封閉類別上發現。 -
修復 Windows 上在
@TempDir
清理期間處理「連接點」的問題:刪除目錄時將不再跟隨連接點,並且將刪除損壞的連接點。
棄用和重大變更
-
當將
TestInfo
注入測試類別建構函式時,TestInfo
現在包含正在建立測試類別實例的測試方法的資料,除非測試實例生命週期設定為PER_CLASS
(在這種情況下,它會繼續包含測試類別的資料)。如果您需要測試類別的TestInfo
,您可以實作@BeforeAll
生命週期方法並將TestInfo
注入到該方法中。 -
當將
TestReporter
注入測試類別建構函式時,發佈的報告條目現在與測試方法而不是測試類別關聯,除非測試實例生命週期設定為PER_CLASS
(在這種情況下,發佈的報告條目將繼續與測試類別關聯)。如果您想為測試類別發佈報告條目,您可以實作@BeforeAll
生命週期方法並將TestReporter
注入到該方法中。
新功能和改進
-
Kotlin 契約,用於
Assertions
中的 Kotlin 特定斷言方法。 -
現在在測試類別建構函式上支援
@TempDir
。 -
現在可以透過新的
@ResourceLock#providers
屬性以程式設計方式在運行時確定共用資源鎖定,該屬性接受ResourceLocksProvider
的實作。 -
現在可以透過新的
@ResourceLock(target = CHILDREN)
屬性配置直接子節點的共用資源鎖定。當測試類別宣告READ
鎖定時,但只有少數方法持有READ_WRITE
鎖定時,這可能會改善並行化。 -
@EnumSource
具有新的from
和to
屬性,支援選取指定範圍內的列舉常數。 -
在
@ParameterizedTest
方法中,如果將@JavaTimeConversionPattern
中的新nullable
屬性設定為true
,則現在可以為 Java Date/Time 類型(例如LocalDate
)提供null
值。 -
新的
@ParameterizedTest(allowZeroInvocations = true)
屬性允許指定在某些情況下預期沒有調用,並且不應導致測試失敗。 -
參數化測試現在支援引數計數驗證。如果設定了
junit.jupiter.params.argumentCountValidation=strict
配置參數或@ParameterizedTest(argumentCountValidation = STRICT)
屬性,則宣告的引數數量與引數來源提供的引數數量之間的任何不符都將導致錯誤。預設情況下,只有在提供的引數少於宣告的引數時才會出現錯誤。 -
ArgumentsProvider
(透過@ArgumentsSource
宣告)、ArgumentConverter
(透過@ConvertWith
宣告)和ArgumentsAggregator
(透過@AggregateWith
宣告)實作現在可以使用來自已註冊ParameterResolver
擴充功能的建構函式注入。 -
TestTemplateInvocationContextProvider
擴充功能現在可以透過覆寫新的mayReturnZeroTestTemplateInvocationContexts()
方法來發出信號,表明它們可能返回零調用上下文。 -
實作
TestInstancePreConstructCallback
、TestInstanceFactory
、TestInstancePostProcessor
、ParameterResolver
或InvocationInterceptor
的擴充功能可以覆寫getTestInstantiationExtensionContextScope()
方法,以在測試類別實例化期間呼叫的Extension
方法中啟用接收測試範圍的ExtensionContext
。此行為將在未來版本的 JUnit 中成為預設行為。 -
新的
PreInterruptCallback
介面定義了希望在@Timeout
擴充功能調用Thread#interrupt()
之前被調用的Extensions
的 API。 -
當透過
junit.jupiter.execution.timeout.threaddump.enabled
配置參數啟用時,將註冊PreInterruptCallback
的實作,該實作會在由於超時而中斷測試線程之前將線程轉儲寫入System.out
。 -
TestReporter
現在允許為測試方法或測試類別發佈檔案,這些檔案可用於將其包含在測試報告中,例如 Open Test Reporting 格式。 -
現在可以使用可以指定為配置參數的包含和排除模式篩選自動註冊的擴充功能。
-
基於
JRE
的條件(例如@EnabledOnJre
和@DisabledForJreRange
)現在支援任意 Java 版本。有關詳細資訊,請參閱使用者指南。 -
@TempDir
擴充功能現在在清理期間警告刪除目標位置在臨時目錄之外的符號連結,以表明目標檔案或目錄未刪除,僅刪除了指向它的連結。
JUnit Vintage
新功能和改進
-
新增了對並行執行測試類別和/或方法的支援。有關更多資訊,請參閱使用者指南。
5.11.4
發行日期: 2024 年 12 月 16 日
範圍: 自 5.11.3 以來的錯誤修復和增強功能
有關此版本所有已關閉問題和提取請求的完整列表,請查閱 GitHub 上 JUnit 儲存庫中的 5.11.4 里程碑頁面。
5.11.3
發行日期: 2024 年 10 月 21 日
範圍: 自 5.11.2 以來的錯誤修復和增強功能
有關此版本所有已關閉問題和提取請求的完整列表,請查閱 GitHub 上 JUnit 儲存庫中的 5.11.3 里程碑頁面。
5.11.2
發行日期: 2024 年 10 月 4 日
範圍: 自 5.11.1 以來的錯誤修復和增強功能
有關此版本所有已關閉問題和提取請求的完整列表,請查閱 GitHub 上 JUnit 儲存庫中的 5.11.2 里程碑頁面。
5.11.1
發行日期: 2024 年 9 月 25 日
範圍: 自 5.11.0 以來的錯誤修復和增強功能
有關此版本所有已關閉問題和提取請求的完整列表,請查閱 GitHub 上 JUnit 儲存庫中的 5.11.1 里程碑頁面。
JUnit 平台
5.11.0
發行日期: 2024 年 8 月 14 日
範圍
-
用於
@ParameterizedTest
方法的@FieldSource
註解 -
參數化測試的可重複
@..Source
註解 -
用於撰寫動態和參數化測試的增強功能
-
用於自動關閉測試中欄位資源的
@AutoClose
註解 -
用於從字串轉換為支援目標類型的
ConversionSupport
公用程式 -
用於指定發現選擇器的可擴展語法
-
@BeforeSuite
和@AfterSuite
註解 -
引擎的類路徑資源掃描支援
-
關於欄位和方法搜尋演算法的眾多錯誤修復和增強功能
如需完整詳細資訊,請參閱線上 5.11.0 發行說明。