如何有条理地使用Test :: Simple?

时间:2015-01-30 12:31:36

标签: perl testing

我想添加一个选项来使用执行--test的{​​{1}}等命令行选项来有条件地测试我的程序。

不幸的是,即使我在&test子例程中添加use Test::Simple tests => 1,Perl也认为我想在其他地方进行测试。

是否可以仅在需要时使用&test甚至Test::Simple

2 个答案:

答案 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");
}