2

Test::Moreテストを実行し、呼び出し元を中止する機能を備えたモジュールが必要になることがよくありますtest_plan。のプラグインリストを設定する一連のテストがありますCatalyst::Test。それらが存在するかどうかを確認するためにテストチェックを行う必要はありません。代わりに、これらのプラグインが存在しない場合、スクリプトを中止したいと思います。

のバグを追跡しようとしていましたが、Catalyst::Authentication::Store::DBI::ButMaintainedこのバグがに存在することに気付きましたCatalyst::Authentication::Store::DBI。ここにあります:

eval {
  require Catalyst::Model::DBI;
  require Catalyst::Plugin::Session;
  require Catalyst::Plugin::Session::State::Cookie;
  require Catalyst::Plugin::Session::Store::File;
  require DBD::SQLite;
  require Test::WWW::Mechanize::Catalyst;
} or plan skip_all => $@;

...

$ENV{'TESTAPP_PLUGINS'} = [ qw(
  Authentication
  Session
  Session::Store::File
  Session::State::Cookie
  Authorization::Roles
) ];

ご覧のとおり、は包含をeval/skip_allチェックしませんAuthorization::Rolesが、プラグインであるため、テストはそれに依存します。

ただし、別の質問があります。これよりもテストの依存関係を指定するためのより洗練された方法はありますか?私の目標は元の作者と同じであることを忘れないでください。テスト要件が存在しない場合は、単にテストをスキップしたいと思います。理想的には、この場合、Catalyst::TestプラグインメカニズムをラップするためにハックしCatalyst::Plugin::*て、残りの部分をなしで実行するためのより良い方法を見つけたいと思いeval/skip_allます。

4

2 に答える 2

1

以下を呼び出すことで、計画内のテストの数に動的に影響を与えることができます。

Test::More->builder->plan(tests=>$total_tests);

これを使用して、ニーズに基づいてテストの数を条件付きで計算できます。

于 2010-09-07T18:38:20.047 に答える
1

必要に応じてプラグインのリストを更新します。

別のパッケージで一連の要件をテストしている場合、依存関係が満たされない場合、そのパッケージが (従来の true 値ではなく) false を返すようにすることができます。

package Catalyst::Test;

eval {
    use Dep1;
    use Dep2;
    # ...
}

# dep check package returns true if we found all the modules
!$@;

# test.pl
use Test::Requires {
    Catalyst::Test => 0.01,  # skip all tests if Catalyst::Test is not present
};
use Test::More tests => 20;  # call Test::More as normal.

という dep チェッカーを使用してこれを実行するとFoo、適切な出力で失敗します。

% perl -I. 足
1..0 # SKIP Foo.pm は (eval 4) 行 2 で真の値を返しませんでした。
# BEGIN が失敗しました -- コンパイルは (eval 4) 行 2 で中止されました。
#
% 証明 -I. 足
foo.pl .. skipped: Foo.pm は (eval 4) 行 2 で真の値を返しませんでした。
ファイル=1、テスト=0、0 ウォールクロック秒 (0.02 usr 0.01 sys + 0.01 cusr 0.00 csys = 0.04 CPU)
結果: ノート
于 2010-09-07T19:16:13.923 に答える