仅运行 Perl 测试文件中的一个命名测试用例

问题描述 投票:0回答:2

我正在尝试查找是否可以在 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
。有没有一种方法可以只执行测试文件中的一个命名测试用例?

perl unit-testing testing
2个回答
9
投票

简短的回答是:不,使用

Test::Simple
(或
Test::More
)和
prove
命令提供的简单测试框架,无法从测试脚本中挑选出一个特定的断言并仅运行该断言。

然而,Perl 测试生态系统有丰富多样的可用选项。 例如,

Test::Class
允许您在标准测试协议之上添加面向对象的层。 这允许您将测试分组为方法,添加设置和拆卸方法,还可以运行单独的测试方法。 如果不修改测试脚本,您仍然无法从命令行完成所有操作,但这离您的要求更近了一步。

当然,一个更简单的解决方案是将您想要的部分复制到自己的

.t
文件中并运行它。


0
投票

这是使用环境变量的一种方法。 它并不优雅,但很有效。 接近子测试的顶部 - 考虑:

subtest test_someTestFunction => sub {
   my $testName = "test_someTestFunction";
   plan skip_all => 'FILTER' if( $ENV{TESTFILTER} && ($testName !~ /$ENV{TESTFILTER}/);

   # Remainder of your test code
};
© www.soinside.com 2019 - 2024. All rights reserved.