問題タブ [pitest]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - try-resource と同等のミュータントのために生き残ったミューテーションをリファクタリングする方法は?
私はjunit5とpitestを試しています。テスト中のコードは次のようになります。
この小さなコード ブロック内に、4 つの生き残ったミューテーションを残しておきました。テストを追加/変更するか、コードをリファクタリングすることによって、強制終了が発生する可能性があります。
私の問題は、最初の突然変異が同等の突然変異であることです-それをリファクタリングする方法がわかりません。他の 3 つの変更は、try-resource-statement によって暗黙的に行われます。
だから私の質問は、この4つの突然変異をリファクタリングする方法ですか? 追加/変更されたテストによってそれらを殺すことはできないと確信しているからです。
java - コマンドラインでは ptest が maven で動作するのに、Jenkins-Pipeline では動作しないのはなぜですか?
ここで奇妙な問題が発生しましたが、その理由はわかりませんでした:
コマンドラインで maven (および Java 11) を使用して pitest を使用すると、期待どおりに動作しますが、宣言型パイプラインを介して Jenkins-Server で実行すると、エラーが発生します。
私のmaven pomの一部:
私のJenkinsfileの一部:
その前に、次の Maven コマンドがパイプラインから呼び出されます。
mvn --batch-mode clean
mvn --batch-mode compile
mvn --batch-mode コンパイラ:testCompile surefire:test -Dmaven.test.failure.ignore=true
コマンドラインでこれらのコマンドを正確に呼び出すと、pitest は完全に機能します。
ロギング結果を比較すると、ほぼ同じです。
コマンドラインからのログ出力:
PIT >> FINE : 利用可能な最大メモリは 3609 mb です
PIT >> FINE : MINION : PITエージェントのインストール
PIT >> INFO : ミニオンに 13 個のテスト クラスを送信しています
PIT >> INFO : ミニオンにテストを送信しました
PIT >> INFO : MINION : 08:51:20 PIT >> FINE : 親から 13 個のテスト クラスが必要です
PIT >> FINE : テストクラスを受けました
PIT >> INFO : 環境チェック中
PIT >> INFO : ミニオン : 08:51:20 PIT >> INFO : Found 1 tests
PIT >> INFO : MINION : 08:51:20 PIT >> INFO : 依存関係分析により、潜在的なテストの数が 0 減りました
ピット >> 情報: ミニオン: 08:51:20 ピット >> 情報: 1 つのテストを受信
PIT >> INFO : MINION : 08:51:20 PIT >> FINE : 1台走行中
PIT >> INFO : MINION : 08:51:20 PIT >> FINE : テストのカバレッジを収集中 [testClass=de.test.Tests, name=creation()]
PIT >> FINE : カバレッジ ジェネレーター ミニオンが正常に終了しました
PIT >> INFO : カバレッジを 0 秒で計算。
PIT >> FINE : カバレッジ計算後の使用メモリ 42 mb
PIT >> FINE : カバレッジ計算後の空きメモリ 201 mb
[…ミューテーション出力カット]
Jenkins-Pipeline からのログ出力:
PIT >> FINE : 利用可能な最大メモリは 1813 mb です
PIT >> FINE : MINION : PITエージェントのインストール
PIT >> INFO : ミニオンに 13 個のテスト クラスを送信しています
PIT >> INFO : ミニオンにテストを送信しました
PIT >> INFO : MINION : 08:46:28 PIT >> FINE : 親から 13 個のテスト クラスが必要です
PIT >> FINE : テストクラスを受けました
PIT >> INFO : 環境チェック中
PIT >> INFO : ミニオン : 08:46:29 PIT >> INFO : Found 1 tests
PIT >> INFO : MINION : 08:46:29 PIT >> INFO : 依存関係分析により、潜在的なテストの数が 0 減りました
ピット >> 情報: ミニオン: 08:46:29 ピット >> 情報: 1 つのテストを受信
PIT >> INFO : ミニオン : 08:46:29 PIT >> FINE : 1台走行中
PIT >> INFO : MINION : 08:46:29 PIT >> FINE : テストのカバレッジを収集中 [testClass=de.test.Tests, name=creation()]
PIT >> FINE : カバレッジ ジェネレーター Minion が正常に終了しました PIT >> INFO : 1 秒で計算されたカバレッジ。PIT >> FINE : カバレッジ計算後の使用メモリ 43 mb PIT >> FINE : カバレッジ計算後の空きメモリ 177 mb PIT >> INFO : Created 0 Mutation test units [INFO] ------------- -------------------------------------------------- --------- [情報] ビルド失敗 [情報] --------------------------------- --------------------------------------- [情報] 合計時間: 3.644 秒 [情報]終了時刻: 2019-06-06T08:46:29+02:00 [INFO] ------------------------------- ----------------------------------------- [エラー] 目的の組織を実行できませんでした。プロジェクト multiuploader の pitest:pitest-maven:1.4.8:mutationCoverage (default-cli): ゴール org.pitest:pitest-maven:1.4.8:mutationCoverage の default-cli の実行に失敗しました: 突然変異は見つかりませんでした。これはおそらく、指定されたクラスパスまたはフィルターに問題があることを意味します。[エラー] 参照詳細については、 http://pitest.orgをご覧ください。
したがって、環境に違いがあるとしか思えませんでしたが、どちらが違いますか? それとも、ピテストのバグですか?
junit5 - PiTest「変更された条件付き境界突然変異が生き残った」理由なし?
私は、JUnit 5 テストを含む小さな Java 11 の例を持っています。
条件境界の変更 → SURVIVED
メインクラス:
テストクラス:
私の観点からすると、次の理由により、突然変異は生き残るべきではありません。
- checkPortOk() は、負でない有効な値の通常のパスです
- checkPortNegative1() は、noting が変更され、例外がスローされた場合の負の値のパスです。
- checkPortNegative2(): 何も変更されていない場合、例外がスローされ、resultPort はまだ 0 であるため、ここでのアサーションは問題ありません
- checkPortNegative2(): < 0 が < -1 またはそれ以下に変更された場合、例外はスローされないため、resultPort は -1 になり、アサートは失敗します (突然変異が強制終了されます)。
- checkPortNegative2(): < 0 が < 1 以上に変更された場合、3 以下と同じ。
だから私の質問は、ここで何かを見逃したのですか、それともピテスト(1.4.9)のバグですか?
解決
@henry が述べているように、次のテストを追加すると問題が解決します。