我有一系列测试,我通过Test :: Harness运行。我对目前测试的详细程度感到非常满意:用户知道运行的测试数量和成功的测试数量,以及测试的总体结果:
/home/user/project/t/01.my_test.t .. ok
All tests successful.
Files=1, Tests=136, 15 wallclock secs ( 0.03 usr 0.00 sys + 13.84 cusr 0.55 csys = 14.42 CPU)
Result: PASS
但是,我想将每个测试的输出记录到一个可以在以后检查的单独文件中。运行测试时的常规输出应该仍然相同(聚合),但是test.log
(或者它被命名)应该具有每个运行的测试的特定结果的信息(希望包括任何其他部分)输出,如评论等)。
我最接近的是使用Capture::Tiny
捕获整个输出,然后手动处理它。但除了这个很麻烦且容易出错之外,输出都是整体处理的,所以在测试运行时没有什么可以显示的。我想避免这种情况。
我也看过TAP::Harness::Archive
,但我无法让它运行,所以我不确定它是否可用于此。
这样做的最佳方式是什么?
我正在实现一个伪包管理器,我正在运行的测试是安装过程的一部分。安装软件包后,将对其进行测试,如果测试失败,则安装将中止。
现在,它作为test
对象的package
方法实现。我认为,因为这必须在多个不同的平台上运行,所以在Perl中做事情可能更好,不必调用系统命令(包括prove
),但我已经准备好改变我的方式。
这就是现在测试的运行方式:
use Path::Class;
my @tests;
while (my $file = readdir(DIR)) {
push @tests, file($path, $file) if ($file =~ /\.t$/);
}
@tests = sort @tests;
# Run the tests
my $harness = TAP::Harness->new({
failures => 1,
exec => [ 'myinterpreter' ],
});
my $aggregator = $harness->runtests(@tests);
if ($aggregator->all_passed) { return 1 } else { return 0 }
答案 0 :(得分:1)
您可以使用工具prove
运行测试。它提供了-a
选项,用于以TAP格式存档每个运行。然后可以稍后处理,例如,与Archive::TAP::Convert
。
这里我在模块目录中运行该工具,其中代码位于lib
,测试位于t
:
prove -a tests.tgz -Ilib t/
结果显示在终端上,并在文件tests.tgz
中捕获。
也许不完全是你在找什么?但它有效且稳固。你应该使用这些工具。
注意:根据Michael Carman的评论,“证明只是App :: Prove的一个(非常薄的)包装器。如果你试图避免系统调用,你可以直接使用该模块。“