Perl Test ::更多详细过程

时间:2014-03-06 15:28:17

标签: perl

我正在编写一个带有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的输出?

1 个答案:

答案 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;