Как перенаправить STDOUT и STDERR в файл и на экран во время выполнения теста Perl

Я написал простой тестовый пример Perl Пример:

use Test::More;
is(2 + 4, 5, "Addition check"); 

вывод на экран:

Failed test 'Addition check'
at t/simpel_perl_test.t line 2.
got: '6'
expected: '5'

Теперь я хочу напечатать сообщение в лог-файл и на экране?

Я не могу использовать существующие модули Perl IO::Tee в <test case name>.t чтобы достичь моего требования.

Не могли бы вы рассказать, как я могу написать сообщение на экране и в файле журнала в тестовом примере Perl?

Используемая команда:

prove -r --timer t/simpel_perl_test.t :: -d 

1 ответ

IO::Capture модули были написаны именно для этого во время выполнения теста. Начните с чтения IO::Capture::Overview, Однако вы, похоже, хотите, чтобы вывод тестовых жгутов вместо этого отправлялся в файл. Может быть, вы хотите предоставить аргумент форматера prove что может записать в файл. Вы могли бы следить за prove вызов с cat в файл. Попробуйте использовать модуль TAP:: Formatter:: File в качестве аргумента, хотя я не могу легко увидеть, как файл получает имя.

Не было бы лучше всего использовать tee команда для этого?

$ prove -r --timer simple_perl_test.t :: -d |tee simple_perl_test.txt
[02:08:12] simple_perl_test.t .. ok       24 ms ( 0.00 usr  0.00 sys +  0.02 cusr  0.00 csys =  0.02 CPU)
[02:08:12]
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.02 cusr  0.00 csys =  0.05 CPU)
Result: PASS
$ cat simple_perl_test.txt 
[02:08:12] simple_perl_test.t .. ok       24 ms ( 0.00 usr  0.00 sys +  0.02 cusr  0.00 csys =  0.02 CPU)
[02:08:12]
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.02 cusr  0.00 csys =  0.05 CPU)
Result: PASS
$
Другие вопросы по тегам