Perl测试::更多阻止之前

时间:2012-05-10 14:16:39

标签: perl

Test :: More是否有某种机制在每个子测试之前运行一段代码?我发现自己在每次测试中都写了相同的安排,我想通过把它放在一个块之前的东西来让我的生活更轻松?我看了一下perldocs,但是我没有看到为此特别建造的东西?

2 个答案:

答案 0 :(得分:6)

自己很容易做到:

use Hook::LexWrap qw( wrap );

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

Hook::LexWrap

答案 1 :(得分: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的实现,因为它调用了它的父类中的那个:

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