TAP :: Harness Perl проверяет вывод тройника - PullRequest
2 голосов
/ 24 февраля 2011

Я запускаю свои тесты, используя TAP :: Harness, когда я запускаю тесты из командной строки в системе Linux, я получаю результаты теста на STDOUT, когда он запускается, но когда я пытаюсь также записать вывод в файлв качестве STDOUT с использованием perl harness.pl |tee out.tap результаты буферизуются и отображаются только в конце, я попытался передать дескриптор файла новому, но результаты все еще буферизуются до записи в файл, есть ли способ не буферизовать вывод, у меня естьдолго работающий пакет и хотел бы посмотреть результаты во время выполнения тестов, а также захватить вывод.

TAP :: Harness версия 3.22 и perl версия 5.8.8

здесьпример кода harness.pl

#!/usr/bin/perl
use strict;
use warnings;
use TAP::Harness;
$|++;

my @tests = ('del.t',);


my $harness = TAP::Harness->new( {
    verbosity => 1,
 } );
$harness->runtests(@tests);

и тест del.t

use Test::More qw /no_plan/;
$|++;

my $count =1;
for (1 ..20 ) {
   ok ( $count ++ == $_, "Pass  $_");
   sleep 1 if ( $count % 5 == 0 ) ;
}

1 Ответ

5 голосов
/ 24 февраля 2011

Использование script вместо tee делает то, что вы хотите:

script -c 'perl harness.pl' file

Нашли также простое изменение, чтобы заставить тройник работать: Укажите formatter_class:

my $harness = TAP::Harness->new( {
    verbosity => 1,
    formatter_class => 'TAP::Formatter::Console',
 } );

Это потому, что TAP::Harness обычно использует другой по умолчанию, если вывод не является tty, что и является причиной буферизации, которую вы видите.

...