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

因此,您可以只推入 for 的实现builderTest::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 回答