1

テストを簡単にするために、perlアプリケーションを「モジュリノ」として構築しています。ディレクトリ構造は次のようになります。

MainScript.pm
t/001_load.t
t/002_setup.t
t/003_etc...

各.tテストファイルの最初のテストでは、次のモジュールもロードされます。

BEGIN { use_ok('MainScript'); }

テストのために、トップレベルのディレクトリで次のコマンドを実行します。

prove -l

この時点までのすべてがうまく機能します。気になるのは、誤って.tテストスクリプトを直接実行したときです。

私の指には、テキストエディタに保存した直後に、ホットキーを押してスクリプトを実行するというほぼ自律的な習慣があります。テストファイルの1つでこれを行うと、それは忠実に実行され、全面的に障害を報告します。独自のディレクトリから実行するとモジュールを認識できないため、これは予想されることです。私の懸念は、いくつかのテストがファイルシステムに書き込むことです。例としては、検証に使用される構成ファイルやデータファイルがあります。私の好みは、テストするはずのモジュールをロードできない場合、テストスクリプトが何かを実行する前にクロークすることです。そうすれば、残りのテストで問題が発生することを心配する必要はありません。

私が現在取り組んでいる解決策は、BEGIN { use_ok('MainScript'); }回線を標準使用の呼び出しに置き換えることです。

use MainScript;

でテストを実行してprove -lも、期待どおりに機能します。use_okテストが削除されたとしても、ファイルの残りの部分が実行されるので、明らかに問題ありません。何らかの理由でテストでモジュールが見つからない場合、テストはチョークし、「証明」するとテストファイルが失敗したと表示されます。エディターから直接スクリプトを実行すると、コンパイル時に失敗し、@INCで要求されたモジュールが見つからないというメッセージが表示されます。これは私にとって望ましい行動のようです。

これを行うためのより良い方法はありますか、および/またはこのアプローチに私を噛み付くような何かがありますか?

4

1 に答える 1

4

それは私がいつもやってきた方法です。

私には1つのテスト(通常は名前が付けられています00-load.t)があり、他にはuse_ok何もありません(バージョン番号を出力することを除いて)。モジュールを実際に実行するすべてのテストは通常​​どおりuseに実行されます。これが失敗した場合、テストを続行しても意味がないためです。

于 2012-01-16T21:53:23.323 に答える