我正在努力寻找答案,但我没有找到任何答案。 我使用 test :: more (test1.t,test2.t,test3.t ...)编写了一些测试。 我写了一个主要的perl脚本(main.pl),它使用 TAP :: Harness 处理所有测试,并使用 formatter_class =>以JUnit格式打印输出。 “TAP ::格式化:: JUnit的即可。 在我的测试中,我使用BAIL_OUT函数。 问题是,当测试被保释时,主脚本也会退出,根本没有输出。如果,例如test3.t bailed_out,我需要查看test1.t和test2.t的结果。我怎么能这样做?
我不能使用exit或die而不是BAIL_OUT,因为我不希望其他测试继续。 (如果test3.t是BAIL_OUT,我不希望test4.t运行。)
有人可以帮帮我吗? 我需要查看在保释测试之前运行的测试的结果。感谢。
答案 0 :(得分:0)
根据Test::More
文档:
BAIL_OUT($原因);
向线束表明事情进展如此糟糕,所有测试都应终止 这包括运行任何其他测试脚本。
这就解释了为什么你的套房会中止。
您可能需要考虑来自Test::Most
或die_on_fail
的{{1}},具体取决于BAIL_OUT的原因。
编辑:看起来Test :: Builder在“灾难性失败”according to the source code退出时无意打印摘要:
skip_all
但是,sub BAIL_OUT {
my( $self, $reason ) = @_;
$self->{Bailed_Out} = 1;
$self->_print("Bail out! $reason");
exit 255;
}
# Don't do an ending if we bailed out.
if( $self->{Bailed_Out} ) {
$self->is_passing(0);
return;
}
标志仅用于考虑打印摘要诊断,并且由于Bailed_Out
公开了基础Test::More
对象,您可能只需调整Test::Builder
子程序并没有设置这个标志。当然,所有未经测试的; YMMV。
答案 1 :(得分:0)
不是将所有测试传递给一个TAP :: Harness,而是在BAIL_OUT
的情况下,您需要一次传入一个测试到线束我还没有看到你的代码,所以这里是我的意思的样本。调整以包括格式化程序和您需要的任何其他内容。
use TAP::Harness;
my $harness = TAP::Harness->new({ merge => 0 });
my $tests = ['t/test1.t', 't/test2.t'];
foreach my $test (@$tests) {
eval {
$harness->runtests([$test]);
}; if ($@) {
# create new harness object if the previous fails catastrophically.
$harness = TAP::Harness->new({ merge => 0 });
}
}