web-dev-qa-db-ja.com

JUnitテストは合格ですが、PITはスイートがグリーンではないと言います

PITミューテーションテストを実行しようとすると、次のエラーが発生します。

突然変異カバレッジが失敗しました:ラインカバレッジを計算するときに、すべてのテストが突然変異なしで合格しませんでした。ミューテーションテストにはグリーンスイートが必要です。

通常のテストビルドを実行すると、テストは正常に実行されますが、ミューテーションテストフェーズの実行中は失敗する可能性がありますが、理由の詳細は提供されていません。 PITテストFAQ に記載されている理由を確認しましたが、何が間違っているのかまだわかりません。

私は試した:

  • マルチスレッドの問題のルールに-Dthreads = 1オプションを追加する
  • 失敗しているカップルテストに固有のシステムプロパティを見つけることができませんでした
  • テストは通常​​の実行では無視されません

私が試すべき他のいくつかのことは何ですか?または、ここで何が起こっているのかをデバッグする他の方法はありますか?

24
Bobby

カバレッジ段階でテストが失敗する一般的な原因は次のとおりです。

  1. 通常のテスト構成に含まれていない/除外されているPITピックアップテスト
  2. テストは、テスト構成で設定された環境変数またはその他のプロパティに依存しますが、pitest構成では設定されません。
  3. テストには、通常のテスト実行中には明らかにされない隠れた順序依存関係があります
  4. PITはあなたの技術スタックの何かを好きではありません-おそらくJUnitテストランナー

1と2を削除したようです。そのため、3と4が残ります。

テスト順序の依存関係を見つけるのは難しい場合があります。これらのいずれかに対する答えが「はい」の場合は、1つある可能性があります。

  • コードベースに可変の静的状態が含まれていますか? (例:シングルトン)
  • テストは、テスト間で状態が持続する可能性のあるデータベース(メモリ内またはその他)にヒットしますか?
  • テストはディスク上のファイルを変更しますか?

上記にリストされていない他の多くの原因もおそらくあります。

コードベースで順序の依存関係が不可能であると確信している場合は、これらの特定のテストに問題が残ります。

コードがないと、これがどうなるかを推測するのは難しいです。それでも失敗するテストの簡略版を投稿できますか?

14
henry