Prove It
狭い主張を確立します:同じテストが、修正前に指定された欠陥動作を捕捉し、修正後にはパスすること。スイート全体がパスするだけでは、これを確立できません。
証人を選ぶ
修正と該当テストを調査します。期待される入力/出力または状態遷移を特定し、正確に1つのpytestノードを選択します。2つのコミットされたローカルGit参照を使用します。after参照には修正とテストの両方が含まれている必要があります。コミットされていない編集は含まれません。このツールを実行するために他人の成果をコミットしないでください。
欠陥アサーションには、次のような特定のメッセージが必要です:
assert expired(now=10, deadline=10), "PROVEIT:expiry-boundary"
メッセージは、選択したテスト関数内のアサーションに記述する必要があります。関連のないアサーション、フィクスチャ、アプリケーションコード、print文には記述しないでください。このアサーションが実際にバグで説明されている動作を観察していることを確認してください。既存のテストにメッセージが必要な場合は、許可された編集範囲内でのみ追加し、そのテストをafterリビジョンに含めてください。それ以外の場合は、不足している入力を説明してください。
比較を実行する
バンドルされたスクリプトを、その絶対インストールパスを使用して実行します。選択したインタプリタには、pytestとプロジェクトの依存関係が既にインストールされている必要があります。依存関係のインストール、ネットワークアクセス、Gitチェックアウト、リセット、スタッシュ、またはコミットは実行されません。
python <skill-directory>/scripts/proveit.py --repo <repository> --before <old-ref> --after <fixed-ref> --test tests/test_expiry.py::test_at_deadline --expect PROVEIT:expiry-boundary --output <new-directory-outside-repository>
ランナーはafterリビジョンの選択されたテストファイルを両方のスナップショットに重ね合わせ、試行ごとに新しいコピーを使用し、デフォルトではリビジョンあたり3回の実行、実行あたり10秒のタイムアウトで実行します。必要に応じて--python、--repeat 2..5、または--timeoutを使用してください。テストがパラメータ化されている場合は、完全なパラメータIDを選択してください。
スナップショットはファイルを分離しますが、実行は分離しません。この環境で既に許可されているコードのみを実行してください。テストはユーザーのファイルシステム、ネットワーク、および資格情報へのアクセスを保持します。一時ディレクトリをセキュリティサンドボックスとして解釈しないでください。関連のないワークツリーやディレクトリを決してクリーンアップしないでください。ランナーは自身の一時スナップショットのみを削除し、証拠ディレクトリはレビューのために残します。
証拠を確認する
report.md、report.json、selected-test.py、fix.diff、および関連ログを読んでください。観察されたアサーション、選択されたノード、フェーズレコード、および変更されたパスを確認してください。
| 結果 | 解釈 | 終了コード |
|---|---|---|
supported | すべての古い実行が宣言されたアサーションにヒットし、すべての新しい実行がパスする。 | 0 |
not_supported | 古いテストもパスするか、修復されたリビジョンがまだそのアサーションにヒットする。 | 1 |
inconclusive | 環境、無関係な失敗、タイムアウト、スキップ、不完全または不安定な実行。 | 2 |
無関係な呼び出しの失敗は、新しいリビジョンがパスする場合でもinconclusiveです。コレクション、依存関係、構文、セットアップ、およびティアダウンの失敗は決して証人ではありません。それらを捕捉されたバグとして再ラベル付けしないでください。観察された原因をスコープ内で解決し、新しい証拠ディレクトリに再実行してください。変更されていない失敗したセットアップを繰り返さないでください。
supportedを受け入れる前に、リビジョン固有のフィクスチャ/設定を検査し、それらが変更を説明していないことを確認してください。選択されたテストファイルのみがオーバーレイされます。インストールされた依存関係は共有され、サードパーティのpytestプラグインの自動ロードは無効になり、プロジェクトのaddoptsはクリアされます。外部プラグインやビルドを必要とするプロジェクトは、別途準備された環境が必要になる場合があります。サポートされていない実行はそのまま報告してください。
テスト、参照、結果、証拠の場所、および重要な制限事項を報告してください。この証人は、これらの実行において指定された動作を捕捉したと言ってください。全体的な正しさ、フレーキネスの不在、一般的なテスト品質、または測定された生産性向上の証明を主張しないでください。ローカルパスやログを含むレポートを、それらをレビューし、該当する公開許可を得ずに公開しないでください。