Pitest (別名 PIT) は、Java および JVM 用の最先端のミューテーション テスト システムです。
詳細については https://pitest.org をご覧ください。
+funmodifiablecollection
フィルターのフィールドに直接保存された変更不可能なコレクションを含める#1321 での API の変更には下位互換性がありますが、1.16.0 に対して作成されたプラグインは以前のバージョンでは動作しない可能性があります。
#1310 のフィルタリングはデフォルトではオフになっています。これをアクティブにするには、フィルター文字列+funmodifiablecollection
を追加します。
1309 では、新しい Maven プロパティparseSurefireArgLine
が追加されます。これはデフォルトで true に設定されていますが、surefire argline 解析を false に設定することで無効にできるようになりました。
#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 バージョンと同期させる問題が大幅に解決されました。
pigest-junit5-plugin 1.2.0 とともに使用すると、pitest は、テスト対象のシステムで使用される junit5 のバージョンと互換性のある junit-platform-launcher のバージョンを自動的に選択するようになります。
Gradle ユーザーにとっては、pitest-junit5-plugin の 1.2.0 を使用するときに API の互換性が依然として発生する可能性があるという問題が残っています。ただし、これらは、正しいバージョンの junit-platform-launcher をクラスパスに手動で追加することで解決できるようになりました。
pitest gradle プラグインの将来のバージョンでは、pitest-maven ソリューションと同様の修正が実装されることが期待されています。
**.
グロブのパターン (@Pfoerd に感謝) コンソールにレポートされる行カバレッジ統計には、フィルターが適用されている場合でも、プロジェクト全体のコード行が含まれていました。その結果、カバレッジ スコアが劇的に低くなりました。
#1150 には、サードパーティのプラグインの更新が必要となる可能性のあるインターフェイスの重大な変更が含まれていることに注意してください。
excludedRunners
パラメータを追加#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
に戻す内部変更により、一部のサードパーティ製プラグインはこのリリースと互換性がない可能性があります。
アップグレードする前に、すべての履歴ファイルを削除する必要があります。
#930 の結果、削除条件ミューテーターの名前がわずかに変更されており、明示的にアクティブ化されている場合はビルド スクリプトで更新する必要がある場合があります。
#900 の結果、 testPlugin
パラメーターは廃止されましたが、pitest はこのリリースでもエラーなしでこれを受け入れ続けます。 Pitest は、クラスパスで提供されるテスト エンジンを使用し、他のテスト エンジンがクラスを処理できない場合は、組み込みの JUnit4 サポートにフォールバックします。
testPlugin
とfailWhenNoMutations
の Ant サポート (@mduggan に感謝)useClasspathJar
オプションによる大規模なクラスパスのサポート (@jqhan に感謝)アップグレードする場合は、以前のリリースで生成された履歴ファイルは 1.3.2 以降と互換性がないことに注意してください。
excludedTestClasses
パラメーターを追加する428 は、excludedClasses フィルターの既存の動作を変更します。以前は、これにより、一部のユーザーにとってはアップグレード時に変更が必要になる可能性のあるクラスが、変更およびテストとしての実行の両方から除外されていました。
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 パラメータが削除されたため、アップグレード ユーザーはビルドの変更が必要になる場合があります
既知の問題- 新しいメンバー変数ミューテーターにより、同期エラーでエラーが発生する可能性があります。ただし、ミューテーターはデフォルトでは無効になっており、生成されたエラーは PIT によって正しく処理されます。
問題を作成または作業する前に、問題管理ルールを参照してください。
Pitest は主に私の仕事ですが、他の多くの人の貢献からも恩恵を受けています。
このコードが github に移行される前に行われたため、ここには表示されていない注目すべき貢献は次のとおりです。
PIT には Jumble プロジェクト (http://jumble.sourceforge.net/) のコードは組み込まれていませんが、Jumble コードベースは PIT のいくつかの側面を開発する際のガイドとして使用されました。