有一个很棒的 Perl 模块
Test::More,每个人都使用它来进行单元测试。这是非常简单的脚本t/sample_1.t
:
use Test::More tests => 1;
fail('This test fails');
我想编写做同样事情的脚本,但没有 Test::More。
我已经阅读了几个关于 TAP(测试任何协议)的文档,以了解如何编写脚本。我读了:
不幸的是,文档还不够。我不得不检查使用 Test::More 的脚本的输出,以发现我需要将诊断结果输出到 STDERR(文档中对此一无所知)。
因此,我编写了一个脚本,它与带有 Test::More 脚本的脚本完全一样。以下是清单t/sample_2.t
:
$| = 1;
print "1..1\n";
print "not ok 1 - This test fails\n";
print STDERR "# Failed test 'This test fails'\n";
print STDERR "# at t/sample_1.t line 3.\n";
print STDERR "# Looks like you failed 1 test of 1.\n";
exit 1;
但是当使用prove
这两个脚本时输出不同的东西。对于不同的测试,“# Failed test 'This test failed'”prove
行显示在不同的行上。这是屏幕截图:
我编写了一个测试脚本,它使用Capture::Tiny来检查两个脚本的 STDERR、STDOUT 和退出代码是否相同。该脚本显示两个脚本输出相同的内容。
我已将所有测试文件和测试脚本存储在GitHub repo中。
我的问题。我应该如何在没有 Test::More 的情况下编写 Perl 单元测试以获得与 Test::More 相同的输出。
PS如果你有兴趣我为什么需要这个。我需要这个来解决我的 Perl 模块Test::Whitespaces的问题。