从证明中捕获Perl模块标准输出

时间:2014-05-22 14:34:47

标签: perl

如何捕获模块的print函数输出到prove测试输出?例如:

A.pm

package A;

sub f {
  print "inside module A";
}

a.t

use Test::More;

ok(f(), "test f() side effects");

示例可能有点不合适,但想法是将打印输出从module A重定向到test a,假设我使用prove而非perl来运行测试,有可能实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

在测试期间暂时重定向输出。

my $scalar;
open my $test_fh, '>', \$scalar;
my $old_fh = select($test_fh);    # $old_fh is probably STDOUT
f();
select($old_fh);
close $test_fh;
ok( $scalar eq 'inside module A', 'test f() side effects' );

此代码使用了一些不太常见的函数和习语:

open $handle, '>', \$var
  

打开输出句柄。对该句柄的输出存储在标量变量$var

$old_handle = select($new_handle)
  

设置“默认”文件句柄,即未提供文件句柄参数时printprintf函数使用的文件句柄。通常默认的文件句柄是STDOUT。返回值是现有的默认文件句柄。