Могу ли я сказать, все ли тесты прошли тест Perl :: More? - PullRequest
6 голосов
/ 02 октября 2009

У меня есть сценарий тестирования Perl, написанный с использованием Test :: More . Прямо перед выходом, и если все тесты пройдены, я бы хотел выполнить некоторые действия по очистке. Если какие-либо тесты не пройдены, я хочу оставить все на месте для устранения неполадок.

Есть ли флаг в Test :: More или какой-либо другой передовой метод в рамках одного сценария тестирования, чтобы сказать, все ли хорошо после завершения самих тестов?

Ответы [ 2 ]

10 голосов
/ 02 октября 2009

Вы можете получить доступ к текущему состоянию тестов с помощью Test :: Builder , доступного по Test::More->builder:

use strict;
use warnings;
use Test::More tests => 1;

ok(int rand 2, 'this test randomly passes or fails');

if (Test::More->builder->is_passing)
{
    print "hooray!\n";
}
else
{
    print "aw... :(\n";
}

В качестве альтернативы, вы можете просто выполнить очистку в конце сценария, но выйти рано, если что-то пойдет не так, с Test::More 'BAIL_OUT("reason why you are bailing");.

Существует множество других данных и статистики о состоянии ваших тестов; см. документацию по Test :: Builder .

0 голосов
/ 02 октября 2009

Вот то, к чему я пришел, чтобы избежать ошибки «Не удается найти объект», показанной внизу этого ответа:

#! /usr/bin/perl 

use strict;
use warnings;
use Test::More tests => 1;

ok(int rand 2, 'this test randomly passes or fails');

my $FAILcount = 0;
foreach my $detail (Test::Builder->details()) {
    if (${%$detail}{ok}==0) { $FAILcount++; }
}

if ($FAILcount == 0) {
    print "hooray!\n";
} else {
    print "aw... :(\n";
}

На Solaris 10 с Perl v5.8.4 (с 31 зарегистрированным патчем) я получил следующее

Can't locate object method "is_passing" via package "Test::Builder"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...