2

Test::More には、すべてのサブテストの前にコードのブロックを実行する何らかのメカニズムがありますか? 私は自分がすべてのテストで同じアレンジメントを書いていることに気づきました。それをbeforeブロックなどに入れて、人生を楽にしたいと思いますか? perldocs を見ましたが、このために特別に構築されたものは見当たりませんでした?

4

2 に答える 2

5

自分で行うのはかなり簡単です:

use Hook::LexWrap qw( wrap );

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

フック::LexWrap

于 2012-05-10T15:23:50.723 に答える
1

Test::MoreTest::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(@_);
}

したがって、親クラスの実装を呼び出すため、builderforの実装をプッシュインするだけで済みます。Test::More

{   package Test::More; 
    sub builder { 
        &stuff_I_want_to_do;
        my $inv = shift;
        return $inv->SUPER::builder( @_ );
        # OR return Test::Builder->new;   
    }
}
于 2012-05-10T15:24:53.453 に答える