我正在使用Test :: More和Test :: Output编写单元测试。我使用Test :: More来验证返回值,我计划使用Test :: Output来验证子例程生成的stdout。
我正在尝试为stdout依赖于发送的参数的子例程编写测试用例。 Test :: Output :: stdout_like(代码引用,regexp,测试描述)看起来具有我想要的功能,但是我正在努力构造包含参数的代码引用。
我认为这是Perl单元测试脚本中的常见做法。谁能提供一个例子?
旁注,感谢Kurt W. Leucht的Perl单元测试介绍:Perl build, unit testing, code coverage: A complete working example
答案 0 :(得分:2)
不,你不能直接在coderef中包含一个arg。
要将arg传递给coderef,您需要实际调用它:
mysub( $arg ); # the usual way to call the sub
$coderef = \&mysub; # get the reference to the sub
$coderef->( $arg ); # call the coderef with an arg (or &$coderef($arg))
但是为了使用Test::Output
工作,您可以在另一个子例程中包含对要测试的子例程的调用:
use Test::Output;
sub callmysubwitharg { mysub($arg) }
stdout_like \&callmysubwitharg, qr/$expecting/, 'description';
而且,这是使用匿名子程序做同样的事情:
stdout_like { mysub($arg) } qr/$expecting/, 'description';