我想添加一个选项来使用执行--test
的{{1}}等命令行选项来有条件地测试我的程序。
不幸的是,即使我在&test
子例程中添加use Test::Simple tests => 1
,Perl也认为我想在其他地方进行测试。
是否可以仅在需要时使用&test
甚至Test::Simple
?
答案 0 :(得分:3)
如果您希望仅在特定条件下加载整个Test::More
语句,则可以执行以下操作:
if( $condition ) {
require Test::More ;
import Test::More ;
plan tests => 1 ;
# Place your tests here...
}
这将与use Test::More tests => 1;
相同。
您的问题导致use
是一个编译时语句,它将在if
语句中执行(在运行时评估)或不执行。
答案 1 :(得分:2)
以下是use if
的解决方案。它看起来有点难看,因为你必须确保if
(编译指示)操作的变量必须设置为"编译时间" (即BEGIN
- 块顺序)。
my $test;
BEGIN{
GetOptions( "test" => \$test) or die "wrong arguments"
}
myTest() if $test;
say "normal program";
sub myTest{
use if $test => 'Test::Simple', tests => 1;
ok("1", "tests are running");
}