如何捕获模块的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
来运行测试,有可能实现这个目标吗?
答案 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)
设置“默认”文件句柄,即未提供文件句柄参数时
printf
函数使用的文件句柄。通常默认的文件句柄是STDOUT
。返回值是现有的默认文件句柄。