我正在编写一个带有Test::More
的Perl测试脚本,用于非常详细的过程。我正试图找出一个很好的做法,用于突出我正在测试的详细过程中的测试结果。
use Test::More;
ok( verbose_process(), 'Test A of a verbose process' );
ok( verbose_process(), 'Test B of a verbose process' );
ok( verbose_process(), 'Test C of a verbose process' );
sub verbose_process{
print "$_\n" for (0..100);
return 1;
}
我想象一种在我的脚本底部询问Test::More
测试摘要的方法。这样的事情可能吗?或者我应该抑制我的verbose_pocess的输出?
答案 0 :(得分:2)
使用Capture::Tiny从进程中捕获STDOUT和STDERR。然后,您可以测试STDOUT / STDERR以确保它们包含预期数据,或者如果您认为输出不重要则丢弃它们。
use strict;
use warnings;
use Test::More;
use Capture::Tiny qw(capture);
my (undef, undef, $result_a) = capture { scalar verbose_process() };
ok($result_a, 'Test A of a verbose process');
my (undef, undef, $result_b) = capture { scalar verbose_process() };
ok($result_b, 'Test B of a verbose process');
my ($stdout_c, undef, $result_c) = capture { scalar verbose_process() };
ok($result_c, 'Test C of a verbose process');
like($stdout_c, qr/100\n\z/, '... and count to STDOUT ended correctly');
sub verbose_process {
print "$_\n" for (0..100);
return 1;
}
done_testing;