Test :: More是否有某种机制在每个子测试之前运行一段代码?我发现自己在每次测试中都写了相同的安排,我想通过把它放在一个块之前的东西来让我的生活更轻松?我看了一下perldocs,但是我没有看到为此特别建造的东西?
答案 0 :(得分:6)
自己很容易做到:
use Hook::LexWrap qw( wrap );
wrap $_, pre => sub { ... }
for qw( is ok ... );
答案 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;
}
}