perl的参数化* .t证明现有的测试

时间:2014-09-02 18:58:56

标签: perl perl-prove

我有一堆perl测试:

  1. 功能测试
  2. 机械化测试
  3. 实际单元测试,断言功能和返回值等
  4. 涉及外部服务的测试,例如WebServices
  5. 以数据库为中心的测试
  6. REST测试
  7. 我通过证明运行所有这些并理论上将它们重新安排到各种目录中并运行类似find t/ -name '*.t' ! -name '*timeout*' | xargs prove -l的东西,但是以特定的方式命名测试变得非常困难(并且不是很好的工程),所以我们可以解析他们通过find

    当我们通过命令行运行时,我们是否可以将测试的通配符列表传递给prove? 如果没有,是否有比我们目前使用的更合理的方法?

2 个答案:

答案 0 :(得分:3)

通常的方法是通过环境变量。测试文件会检查它是否应该运行,如果它不能快速skip_all

例如:

use strict;
use warnings;
use Test::More;

BEGIN {
   plan skip_all => "not running extended tests" unless $ENV{EXTENDED_TESTING};
};

# your slow tests here

done_testing();

现在通常会跳过该测试。但是,如果您将EXTENDED_TESTING环境变量设置为"1",它将会运行。

Standard个环境变量包括EXTENDED_TESTINGRELEASE_TESTINGNONINTERACTIVE_TESTINGNO_NETWORK_TESTING也在流行。

有各种自动化的模块,例如Test::Is,它允许更简单的语法:

use strict;
use warnings;
use Test::More;
use Test::Is "extended";

# your slow tests here

done_testing();

如果您有其他特定于应用程序的类别,则必须自己创建一些环境变量。如果您认为它们看起来非常有用,请发布关于它们的博客,也许它们会成为标准的环境变量。

答案 1 :(得分:1)

我想我的答案是Test::Less

测试::更少 - 测试分类和子集执行

test-less通常将标记和测试文件之间的映射索引文件保存在名为t / Test-Less / index.txt的文件中。您可以使用--file选项或TEST_LESS_INDEX环境变量覆盖它。

Tags are strings matching /^[\w\-]+$/.

-list和-prove命令采用所谓的标记规范。

specication是一个标签列表,可能还有文件名。

test-less -prove foo bar baz

运行所有foo测试,条形测试和baz测试。

    test-less -prove foo,bar,baz

即使我能够修复Test :: Less中的编译错误,我仍然无法使用自2009年以来已经破坏的Test :: Less运行任何测试。所以看看Test :: Class可能就是答案:

http://search.cpan.org/~ether/Test-Class-0.46/lib/Test/Class.pm

有时你只想进行一次测试。注释掉其他测试或编写代码以跳过它们可能很麻烦,因此您可以指定TEST_METHOD环境变量。该值应该是有效的正则表达式,如果存在,则仅运行其名称与正则表达式匹配的测试方法。仍将运行启动,设置,拆卸和关闭测试。

执行此操作的一种简单方法是在调用runtests方法之前指定环境变量。

Running a test named customer_profile:



#! /usr/bin/perl
 use Example::Test;

 $ENV{TEST_METHOD} = 'customer_profile';
 Test::Class->runtests;

    Running all tests with customer in their name:

     #! /usr/bin/perl
     use Example::Test;

     $ENV{TEST_METHOD} = '.*customer.*';
     Test::Class->runtests;