Как перенаправить 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
$