我正在尝试查找是否可以在 Perl 测试文件中仅运行一个测试用例。例如,考虑以下 Perl 测试文件(复制自 http://www.thegeekstuff.com/2013/02/perl-test-simple/):
#!/usr/bin/perl
use strict;
use warnings;
use Test::Simple tests => 2;
sub hello_world
{
return "Hello world!";
}
sub get_number
{
return int(rand(1000));
}
ok( hello_world( ) eq "Hello world!", "My Testcase 1" );
ok( get_number( ) > 0, "My Testcase 2" );
当我使用命令
prove -v test.t
运行此文件时,我得到以下输出:
test.t ..
1..2
ok 1 - My Testcase 1
ok 2 - My Testcase 2
ok
现在,我只想运行第二个测试用例,即
My Testcase2
。有没有一种方法可以只执行测试文件中的一个命名测试用例?
简短的回答是:不,使用
Test::Simple
(或 Test::More
)和 prove
命令提供的简单测试框架,无法从测试脚本中挑选出一个特定的断言并仅运行该断言。
然而,Perl 测试生态系统有丰富多样的可用选项。 例如,
Test::Class
允许您在标准测试协议之上添加面向对象的层。 这允许您将测试分组为方法,添加设置和拆卸方法,还可以运行单独的测试方法。 如果不修改测试脚本,您仍然无法从命令行完成所有操作,但这离您的要求更近了一步。
当然,一个更简单的解决方案是将您想要的部分复制到自己的
.t
文件中并运行它。
这是使用环境变量的一种方法。 它并不优雅,但很有效。 接近子测试的顶部 - 考虑:
subtest test_someTestFunction => sub {
my $testName = "test_someTestFunction";
plan skip_all => 'FILTER' if( $ENV{TESTFILTER} && ($testName !~ /$ENV{TESTFILTER}/);
# Remainder of your test code
};