我注意到在Perl中,自定义是将所有测试都粘贴到 t 目录中。你如何将单元测试与功能测试分开?或者,为了使问题更简单,更明显,如何将快速运行的测试与不快速运行的测试分开?当所有测试一起运行时,测试花费的时间太长而无法在开发中常规使用,这很可惜。
我想我可以设置一些环境变量,如QUICK_TEST
,并根据其值跳过长测试。你是否将单元和功能测试分开?怎么样? (这不是一个民意调查 - 我只是想也许有一些惯用的解决方案。)
更新:到目前为止,我已经谈到了这个问题:
package Test::Slow;
use strict;
use Test::More;
BEGIN {
plan(skip_all => 'Slow test.') if $ENV{QUICK_TEST};
}
1;
在附近的.t
文件中:
# This is a slow test not meant
# to run frequently.
use Test::Slow;
use Test::More;
它看起来效果很好。
P.S。现在在CPAN上以Test::Slow显示。
答案 0 :(得分:10)
运行prove --state=all,save
一次,将一些信息添加到.prove
。
如果您有多核计算机,请运行prove --state=slow -j9
,并且您的测试可以同时运行。
这将导致您在开始时开始运行时间最长的测试,以便在完成所有其他测试之前更有可能完成测试。这可以减少完成的总时间,而不会阻止任何测试运行。
答案 1 :(得分:8)
您当然可以将测试划分到t下的子目录中,使用您想要的任何分类方案。如果您使用环境变量,我建议使用默认值(如果未设置变量)运行所有测试。我已经看到t /只包含在开发中常规运行的测试而其他测试放在不同目录下的情况(例如t-selenium /)。
我认为这归结为一致性比你做出的选择更重要;如果你保持一致,几乎任何事情都会奏效。
答案 2 :(得分:3)
通常仅作者测试被放入 xt 目录。它们是手动运行的。因此,如果长时间测试仅限作者,请使用 xt 。通常, t 对于CPAN模块是常见的。对于私人使用,您可以将它们放在任何您喜欢的地方。
答案 3 :(得分:3)
在Test::Manifest中,我可以为每个测试文件分配一个级别。仅当测试级别高于该阈值时,才运行测试文件。较低级别是我想要一直运行的东西,下一级是稍慢的东西,依此类推。
然而,我几乎没有使用它。如果我专注于系统的一部分,我只是为该部分运行测试:
% perl -Mblib t/some_test.t
有些人喜欢使用prove
来做同样的事情。
当我需要进行集成测试以查看我的更改是否破坏了其他任何内容时,我最终只运行完整的测试套件。