1

いつものように Perl プロジェクト用のテスト スイートがlibあり、ディレクトリとtディレクトリが含まれています。のテストはt、サブディレクトリによって構造化されています。だから私はそれらを使用して実行します:

prove -Ilib -r t/

これまでのところ特別なことは何もありません.Perlでテストするための非常に標準的な方法です.

これが標準的なテスト方法であることが前提であるため、次のことが当てはまることを確認したいと思います。

「で実行するprove -rt、テストする必要があるすべてのものがテストされました」。

これは非常に重要です。そうしないと、本当にすべてのテストを呼び出して問題がないことを確認できないからです。誰かが上記を呼び出すと、知らないうちに、利用可能なテストの一部を呼び出し、一部を残してしまう可能性があります。非常に厄介です...実行されていないテストは役に立ちません。開発者がすべてのテストを呼び出すのは、できるだけ簡単で予測可能でなければなりません! テストスーツの残りの部分を実行する方法を調べる必要がある場合、これは悪いことです。あなたはそれについて知らないかもしれませんし、とにかくそれをしないかもしれません。

ここで私の問題が発生します。親切にツールを提供するpgTAPpg_proveを使用して、いくつかのテストを統合する必要があります。ここで、テストを行うために 2 つのコマンドを作成する必要があります。実行prove -Ilib -rに加えて、例えばのようなものも実行する必要がありますpg_prove -S schema=customerX -U dbuser -d dbname t/pgTAP/*.sql。テストを自動的に呼び出す場合、問題はそれほど大きくありませんcronしかし、私たち怠惰な開発者が忙しい日々の中ですべてのテストを実行する可能性は本当に低くなります。

proveしたがって、それらのテストも含めるような方法でテストを実装するための最良のアプローチは何でしょうか。.t全体をラップするいくつかのファイルを作成する必要があるということですか (そしてどのように?)? HarnessCPANのすべてのものでできるトリックはありますか? test_all.sh上記の仮定を破ったとしても、両方のコマンドを含むルートディレクトリの単純なものが最善の仕事をするでしょうか?

つまり、私の質問は次のとおりです。pgTAP を含むすべてのテストを実行できますproveか? そうでない場合、問題を解決するためのベスト プラクティスはありますか?

どうもありがとう。

4

1 に答える 1

1

はい。実際、pg_proveすべてを に渡すだけproveです。pgTAP テストが で終わると仮定すると、次.sqlのようにすべてのテストを実行できます。

prove -lr --ext .sql --ext .t \
--source pgTAP \
--pgtap-option dbname=dbname \
--pgtap-option username=dbuser \
--pgtap-option suffix=.pg \
--pgtap-option set=schema=customerX

Module::Build を使用すると、 circle で./Build test行ったように、すべてのテストを実行することもできます。詳細については、TAP::Parser::SourceHandler::pgTAP のドキュメントを参照してください。

于 2013-05-24T18:09:21.923 に答える