テストのベストプラクティス - Amazon CodeCatalyst

テストのベストプラクティス

CodeCatalyst で提供されるテスト機能を使用する際は、以下のベストプラクティスに従うことをお勧めします。

自動検出

CodeCatalyst でアクションを設定する際に、自動検出を使用すると、JUnit テストレポートなどのさまざまなツールの出力が自動的に検出され、その出力を元に関連する CodeCatalyst レポートが生成されます。自動検出を活用した場合、検出された出力の名前やパスが変更されても、レポートが引き続き生成されます。新しいファイルを追加すると、CodeCatalyst で自動的に検出され、関連するレポートが生成されます。ただし、自動検出を使用する場合は、この機能に関して以下の点を考慮することが重要です。

  • アクション内で自動検出を有効にすると、同じタイプのすべての自動検出レポートで同じ成功基準が共有されます。例えば、最小のパスレートなどの共通の基準は、自動検出されるすべてのテストレポートに適用されます。同じタイプのレポートに異なる基準が必要な場合は、それらのレポートごとに明示的に設定する必要があります。

  • 自動検出では、依存関係によって生成されたレポートも検出されます。成功基準が設定されている場合、それらのレポートに関するアクションが失敗する可能性があります。この問題は、エクスクルードパスの設定を更新することで解決できます。

  • 自動検出では、実行時にアクションがスキャンされるため、毎回同じレポートのリストが生成されるとは限りません。常に特定のレポートが生成されるようにするには、レポートを明示的に設定する必要があります。例えば、ビルドの過程でテストの実行が停止した場合、テストフレームワークで出力は生成されず、その結果、テストレポートも生成されないため、アクションは成功する可能性があります。アクションの成功をその特定のテストに依存させる場合は、そのレポートを明示的に設定する必要があります。

ヒント

新規または既存のプロジェクトを開始する際は、プロジェクトディレクトリ全体 (**/* を含む) に対して自動検出を使用します。これにより、サブディレクトリ内のファイルを含め、プロジェクト内のすべてのファイルに対してレポート生成処理が呼び出されます。

詳細については、「アクションにおける品質レポートの設定」を参照してください。

成功基準

成功基準を設定することで、レポートに品質しきい値を適用できます。例えば、2 つのコードカバレッジレポートが自動検出され、1 つは 80% のラインカバレッジで、もう 1 つは 60% のラインカバレッジである場合、次のオプションがあります。

  • ラインカバレッジの自動検出の成功基準を 80% に設定します。これにより、1 つ目のレポートは合格し、2 つ目のレポートは失敗し、アクション全体としては失敗します。ワークフローのブロックを解除するには、2 つ目のレポートのラインカバレッジが 80% を超えるまで、プロジェクトに新しいテストを追加します。

  • ラインカバレッジの自動検出の成功基準を 60% に設定します。これにより、両方のレポートが合格し、アクションは成功します。その後、2 つ目のレポートのコードカバレッジを向上させることができます。ただし、このアプローチでは、1 つ目のレポートのカバレッジが 80% 未満に低下しないことを保証できません。

  • ビジュアルエディタを使用するか、レポートごとに明示的な YAML セクションとパスを追加することで、レポートの一方または両方を明示的に設定します。これにより、レポートごとに個別の成功基準とカスタム名を設定できます。ただし、このアプローチでは、レポートパスが変更されると、アクションが失敗する可能性があります。

詳細については、「レポートの成功基準の設定」を参照してください。

パスの包含/除外

アクション結果を確認する際は、IncludePathsExcludePaths を設定することで CodeCatalyst で生成されるレポートのリストを調整できます。

  • IncludePaths を使用して、CodeCatalyst でレポートの検索時に含めるファイルとファイルパスを指定します。例えば、"/test/report/*" を指定すると、CodeCatalyst では /test/report/ ディレクトリを検索するアクションで使用されるビルドイメージ全体が検索されます。そのディレクトリが見つかると、CodeCatalyst でそのディレクトリ内のレポートが検索されます。

    注記

    手動で設定するレポートの場合、IncludePaths は単一のファイルに一致する glob パターンである必要があります。

  • ExcludePaths を使用して、CodeCatalyst でレポートの検索時に除外されるファイルとファイルパスを指定します。例えば、"/test/reports/**/*" を指定すると、CodeCatalyst で /test/reports/ ディレクトリ内のファイルは検索されません。ディレクトリ内のすべてのファイルを無視するには、**/* glob パターンを使用します。

考えられる glob パターンとしては、以下のようなものがあります。

パターン 説明

*.*

現在のディレクトリ内のドットを含むオブジェクト名すべてと一致する

*.xml

現在のディレクトリ内の .xml で終わるオブジェクト名すべてと一致する

*.{xml,txt}

現在のディレクトリ内の .xml または .txt で終わるオブジェクト名すべてと一致する

**/*.xml

すべてのディレクトリ内の .xml で終わるオブジェクト名と一致する

testFolder

testFolder というオブジェクトと一致し、ファイルとして扱う

testFolder/*

testFolder の 1 階層下のサブフォルダ (testFolder/file.xml など) 内のオブジェクトと一致する

testFolder/*/*

testFolder の 2 階層下のサブフォルダ (testFolder/reportsFolder/file.xml など) 内のオブジェクトと一致する

testFolder/**

testFolder 内のサブフォルダ、および testFolder 以下にあるファイルと一致する (testFolder/file.xmltestFolder/otherFolder/file.xml など)

CodeCatalyst では、glob パターンを次のように解釈します。

  • スラッシュ (/) 文字は、ファイルパス内のディレクトリを区切ります。

  • アスタリスク (*) 記号は、フォルダの境界を超えない、0 文字以上の名前の要素と一致します。

  • 二重アスタリスク (**) は、すべてのディレクトリをまたいで、0 文字以上の名前の要素と一致します。

注記

ExcludePathsIncludePaths よりも優先されます。IncludePathsExcludePaths の両方に同じフォルダが含まれている場合、そのフォルダはレポート生成のためにスキャンされません。