2013-05-01 4 views
0

Я использую Test :: Unit :: TestCase для модульного тестирования в perl. Есть ли способ сделать какое-то специальное утверждение в sub tear_down, если - и только если - текущий тест успешно до сих пор.Выполнение проверки в Perl Test, если (и только если) тестовый пример успешно завершен

sub set_up { 
    my ($O_self) = @_; 

    # prepare test case 
} 

sub tear_down { 
    my ($O_self) = @_; 

    # how to check if test succeeds so far? 
    if (...) { 
    $O_self->assert_something_special_for_all_tests(); 
    } 
} 

sub test_any1 { 
    # some test 
} 

sub test_any2 { 
    # some other test 
} 

Конечно, я могу сделать специальную проверку в конце каждого теста, но было бы гораздо лучше, чтобы сделать это внутри tear_down, так что я не могу забыть специальный чек.

+0

Какая специальная проверка вы хотите сделать? – Schwern

+0

В большинстве моих тестов я немного насмешливо. В arange-part я определяю некоторые ожидания, и после проведения теста я хочу утверждать, что все ожидания расходуются. – Meise2000

ответ

2

Test :: Unit :: TestCase не обновлялся через 8 лет. Он не использует обычную инфраструктуру Test :: Builder, поэтому ее нельзя комбинировать с другими тестовыми модулями. Избегайте его, если это возможно. Если вы хотите выполнить тестирование стиля xUnit в Perl, вместо этого используйте вместо этого Test::Class.

Поскольку он построен с использованием Test::Builder, вы можете получить доступ к базовому объекту Test :: Builder и задать ему состояние теста.

sub teardown : Test(teardown) { 
    my $self = shift; 
    my $tb = $self->builder; 

    my $all_tests_passing = !grep !$_, $tb->summary; 
    do_something_extra if $all_tests_passing; 
};