2012-05-10 6 views
0

Test :: Moreには、すべてのサブテストの前にブロックを実行するメカニズムがありますか?私は自分自身がすべてのテストで同じ取り決めを書いていることを見出しています。私は以前のブロックなどに入れて自分の人生を楽にしたいのですか?私はperldocsを見ましたが、私はこれのために特別に作られたものは見ませんでしたか?Perl Test ::ブロック前より多く

+0

完全に独立したユニットを持つテストの重要な部分とは考えられていませんか?とにかく。あなたはいつもあなたのテスト値をラップし、 'Test :: More'関数のパラメータとして渡す関数を使うことができます。 –

+0

おそらく 'サブテスト 'を活用することができます。 – JRFerguson

+0

私が慣れていたブロックの前はすべての単一のテストの前にexcecuteです。したがって完全に独立しています。私は一時的な解決策として、私のためにこれを行うarrange()という関数を作成しました。しかし、私はフレームワークを活用しようとしていました。 –

答えて

6

を自分で行うことがむしろ簡単:

use Hook::LexWrap qw(wrap); 

wrap $_, pre => sub { ... } 
    for qw(is ok ...); 

Hook::LexWrap

1

Test::Moreのテストは、すべてのテストの前Test::Builder::Module::builderを実行するように見えます。その実装をこれで置き換えることができます。

{ package Test::Builder::Module; 
    my $old_imp = \&Test::Builder::Module:builder; 
    no warnings 'redefine'; 
    sub builder { 
     Mypackage::setup_test(); 
     goto &$old_imp; 
    } 
} 

そして、それはあまりにも危険なようであれば、それは実際にこのようにそれを呼び出す:

sub is ($$;$) { 
    my $tb = Test::More->builder; 

    return $tb->is_eq(@_); 
} 

ので、あなただけの押し込みができbuilderの実装Test::Moreのために、それはその中に1を呼び出しますので、親クラス:

{ package Test::More; 
    sub builder { 
     &stuff_I_want_to_do; 
     my $inv = shift; 
     return $inv->SUPER::builder(@_); 
     # OR return Test::Builder->new; 
    } 
} 
関連する問題