如何单元测试打印到屏幕的Perl函数?
发布时间:2020-12-15 21:25:36 所属栏目:大数据 来源:网络整理
导读:我试图使用 Test::More单位测试Perl功能打印到屏幕。 我知道这个输出可能会干扰工具,如prove。 我如何捕获这个输出,所以我可以打印它与diag(),并且还运行测试输出本身? 解决方法 更新:IMHO,这个问题的正确答案应该是使用 Test::Output: #!/usr/bin/pe
我试图使用
Test::More单位测试Perl功能打印到屏幕。
我知道这个输出可能会干扰工具,如prove。 我如何捕获这个输出,所以我可以打印它与diag(),并且还运行测试输出本身? 解决方法
更新:IMHO,这个问题的正确答案应该是使用
Test::Output:
#!/usr/bin/perl use strict; use warnings; use Test::More tests => 1; use Test::Output; sub myfunc { print "This is a testn" } stdout_is(&;myfunc,"This is a testn",'myfunc() returns test output'); 输出: C:Temp> tm 1..1 ok 1 - myfunc() returns test output 我离开原来的答案供参考,我相信,它仍然说明一个有用的技术。 您可以本地化STDOUT并在调用函数之前重新打开标量,然后恢复: #!/usr/bin/perl use strict; use warnings; use Test::More tests => 1; sub myfunc { print "This is a testn" } sub invoke { my $sub = shift; my $stdout; { local *STDOUT; open STDOUT,'>',$stdout or die "Cannot open STDOUT to a scalar: $!"; $sub->(@_); close STDOUT or die "Cannot close redirected STDOUT: $!"; } return $stdout; } chomp(my $ret = invoke(&;myfunc)); ok($ret eq "This is a test","myfunc() prints test string" ); diag("myfunc() printed '$ret'"); 输出: C:Temp> tm 1..1 ok 1 - myfunc() prints test string # myfunc() printed 'This is a test' 对于版本早于5.8的perl,你可能需要使用IO::Scalar,但我不知道如何在5.8之前工作。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |