Pitest(又稱 PIT)是最先進的 Java 和 JVM 突變測試系統。
請造訪 https://pitest.org 閱讀所有相關內容
+funmodifiablecollection
過濾器中欄位的不可修改集合#1321 中的 API 變更是向後相容的,但針對 1.16.0 編寫的插件可能不適用於早期版本。
預設情況下,#1310 的過濾處於關閉狀態。要啟動它,請新增過濾器字串+funmodifiablecollection
。
1309 新增了新的 maven 屬性parseSurefireArgLine
。預設為 true,但現在可以透過將其設為 false 來停用 Surefire argline 解析。
#1305 未記錄包名稱 com.sun* 中代碼的覆蓋範圍
旨在取得「com.sun.*」套件中舊版 JDK 類別的過濾器缺少'
,導致如果被測試的程式碼恰好位於以「sun」開頭的套件中,則不會註冊程式碼覆蓋率。
當實現了抑制延遲執行程式碼的變異過濾的附加邏輯時,將重新引入靜態初始化程式程式碼的呼叫動態呼叫追蹤。
請注意,先前需要在 Surefire 和 Pitest 的jvmArgs
和argline
參數之間複製 argline 參數的 Maven 用戶在升級時可能需要調整其配置。提供給 Surefire 的條目現在將自動新增至 Pitest。
#1267 將確保現在報告 JUnit5 外掛程式先前遇到的隱藏錯誤。這是向後相容的 API 變更。在 JUnit5 外掛程式更新為使用擴充功能的 api 之前,它不會產生任何影響。更新後的插件將與早期版本的pitest不相容。
由於 #1251 中的重大 api 更改,在升級到 Pitest 1.15.0 時,arcmutate kotlin 插件應升級到 1.1.0
#1246 使用歷史文件時優先考慮先前的查殺測試
#1212 很大程度上解決了 maven 用戶保持 Pitest-junit5-plugin 版本與 junit5 版本同步的問題。
當與 Pitest-junit5-plugin 1.2.0 一起使用時,pitest 現在將自動選擇與測試系統使用的 junit5 版本相容的 junit-platform-launcher 版本。
對於 gradle 使用者來說,在使用 1.2.0 版的pitest-junit5-plugin 時仍然可能遇到 api 相容性問題。不過,現在可以透過手動將正確版本的 junit-platform-launcher 新增到類別路徑來解決這些問題。
希望 Pitest gradle 插件的未來版本能夠實現類似 Pitest-maven 解決方案的修復。
**.
全局模式(感謝@Pfoerd) 控制台上報告的行覆蓋率統計資料包括整個專案的程式碼行,即使應用了篩選器也是如此。這導致覆蓋率分數極低。
請注意,#1150 包括破壞性的介面更改,可能需要更新第三方外掛程式。
excludedRunners
參數加入到命令列介面和 Ant#1067 的結果是,只為每個 JVM 的單一類別創建突變,這一點很重要。因此, MutationGrouper
擴充點已被刪除,因為這會違反此限制。不再支援任何使用此擴充功能的第三方外掛程式。
版本還包括內部資料結構的多項變更。任何依賴這些結構的第三方插件可能需要更新。
1116 提供了一種粗略的方法來排除 Pitest 的其他過濾器未拾取的自動產生的程式碼。預設情況下它是禁用的,因為它可能會排除在某些情況下對突變有效的程式碼,但可以透過添加功能字串+nofirstline
來啟用。
添加對 Kotlin 等語言的支持,其中原始檔案可能不在與其套件匹配的目錄結構中。請注意,如果相同的檔案名稱出現在多個位置,pitest 無法保證解析正確的檔案。
請注意,#1085 更改了預設行為,因此預設報告不再寫入帶有時間戳記的目錄。如果您需要此行為,則需要明確啟用它。
1078 是一個重大的介面更改,但包含在一個點版本中,因為據信目前沒有外部客戶端。
1054 將自動新增 headless=true (以防止 Mac 上的鍵盤焦點被盜)的支援移至功能中。預設情況下啟用它,但可以透過將-MACOS_FOCUS
新增至功能字串來停用。
1055 新增了透過添加+auto_threads
特徵字串來猜測當前機器的適當執行緒數的選項。此選項預設為停用,專為本地使用而設計。不建議在 CI 伺服器上使用。
dependencyDistance
參數由於 #1040,任何外部 Pitest 測試外掛程式(例如 JUnit 5、TestNG、arcmutate 加速器)在升級時都必須更新至相容版本 (1.0.0)。
早期版本的歷史檔案不相容,升級時應刪除。
由於#1015,在 TestNG 測試的程式碼庫中使用 Pitest 時,現在必須設定 TestNG 外掛程式。在早期版本中,支援是自動包含的。
由於 #993,任何希望使用研究導向的 RV 操作員的人都必須配置 Pitest-rv 插件,但不建議將這些修改器用於一般用途。
emptyMap
而不是null由於內部更改,某些第三方外掛程式可能與此版本不相容。
升級前應刪除所有歷史檔案。
由於 #930,刪除條件變數的名稱已略有更改,如果明確激活,可能需要在建置腳本中進行更新。
由於 #900, testPlugin
參數現在已失效,但在這個版本中,pitest 將繼續接受它,不會出現錯誤。 Pitest 將使用類別路徑上提供的任何測試引擎,當其他測試引擎無法處理該類別時,將回退到內建的 JUnit4 支援。
testPlugin
和failWhenNoMutations
的支持(感謝 @mduggan)useClasspathJar
選項支援大型類別路徑(感謝 @jqhan)請注意,升級時先前版本產生的歷史檔案與 1.3.2 以上版本不相容。
excludedTestClasses
參數428 改變了 exceptedClasses 過濾器的現有行為。以前,這排除了類別被突變並作為測試運行,這可能需要某些人在升級時進行更改。
由於 429 TestNG 測試將不再被自動偵測 - 新的testPlugin
參數必須明確設定為「testng」。
(注意 #347不會偵測javax.annotaion.Generated
,因為它只保留原始碼。)
注意 - 在此版本中,maven 外掛程式將自動決定要變更哪些類,而不是假設套件名稱與群組 ID 相符。
maxSurviving
突變體存活時中斷構建請注意,此版本包含一個已知問題 (#231)。請升級。
includeLaunchClasspath=false
請注意,任何儲存的歷史文件或聲納結果在此版本中均無效。
請注意,此版本中基於 Ant 的項目的設定發生了變化。有關使用的詳細信息,請參閱 ant 設定。
此版本還更改了許多內部實作細節,其中一些細節可能對維護與 PIT 整合的工具的人感興趣/重要。
突變現在在內部範圍內,如 https://groups.google.com/forum/#!topic/pitusers/E0-3QZuMYjE 中所述
引入了一個新類別(org.pitest.mutationtest.tooling.EntryPoint),它消除了啟動突變分析的各種方式中存在的一些重複。
已知問題- 修復 #33 可能無法解決 Maven 2 使用者的問題。
Groovy 程式碼的偵測尚未使用 Groovy 2 進行測試,它可能會產生與早期版本截然不同的位元組程式碼。
由於刪除了 inScopeClasses 參數,升級用戶可能需要修改其構建
已知問題- 新的成員變數 mutator 可能會導致同步錯誤中的錯誤。然而,預設情況下該變元已停用,且 PIT 可以正確處理產生的錯誤。
在建立或處理問題之前,請查閱我們的問題管理規則。
Pitest 主要是我的工作,但也受益於許多其他人的貢獻。
值得注意的貢獻在這裡不可見,因為它們是在此程式碼遷移到 github 之前做出的,包括
儘管 PIT 未合併 Jumble 專案 (http://jumble.sourceforge.net/) 中的任何程式碼,但在開發 PIT 的某些方面時,Jumble 程式碼庫被用作指南。