すぐにCPANにアップロードしたいPerlモジュールを書いています。リリース間で何も壊れないことを確認するために、テストスイートを作成しました。リリース時にのみ実行するのではなく、インストール時にどのような種類のテストを実行する必要がありますか?私が実際に突き止めることができるのは、リリース時間のみである唯一のものは、PODチェッカー、Perl批評家チェックなどです。
2 に答える
脆弱なテストであるか、完了するまでに長い時間がかかる場合を除いて、インストール時に可能な限りテストを行っても害はありません。デフォルトでテストを実行しない場合、CPAN上のモジュールの自動テスターもそれらを実行しないことに注意してください。
一般に、次の場合にテストをリリース時間テストにします...
- モジュールの配布にのみ関係します
- 結果はユーザーの環境で変更されません
- 結果はランタイムに影響しません
- テストを信頼できるものにするのは難しい
- テストには多くの高価な依存関係があります
これは実用的な選択であり、難しい公式はありません。これは、一方では考えられるすべてのバグをキャッチすることと、他方ではモジュールのインストールの容易さと信頼性の間のバランスです。バグを見逃したくないが、誤検知はしたくないし、テストするためだけに依存関係が多すぎないようにしたい。
Test::XTおよびTest::Distributionは、PODのテスト、変更ログ、README、MANIFESTが正しいかどうかなどの特定の重要なファイルがある場合など、ほとんどのモジュールに対して実行する一連のストックテストを提供します。 。それらに含まれるもののほとんどは、上記のほぼすべてのルールに合格した場合にのみリリースする必要があります。
良い例は、PODのテストです。これは、正確性(Test :: Pod)または完全性(Test :: Pod :: Coverage)のいずれかです。一方では、どちらもランタイムに影響を与えず、両方とも追加のモジュールを必要とします。ただし、インストールしているユーザーが別のPODパーサーを使用していると、PODが破損する可能性があります。ただし、破損は通常些細なことであり、ドキュメントの有用性に深刻な影響を与えることはありません。したがって、インストール時にPODをテストすると、いくつかのマイナーなPODバグが検出される可能性がありますが、面倒なことをする価値はありません。
Test :: Perl::Criticは明確なリリースのみのテストです。結果は完全に静的であり、実行時間には関係ありません。作者が非標準の引用スタイルまたは些細なことを使用したためにインストールが失敗することほどイライラすることはありません。
Test::DependenciesとTest::DependentModulesも優れたケーススタディです。依存関係が多く、扱いにくく、インストール時に結果が変わる可能性はほとんどありません。