【发布时间】:2025-11-25 06:35:01
【问题描述】:
尝试使用Test::More 对名为test.tap 的文件进行基本测试:
use Test::More tests => 2;
is( 1, 1 );
is( 2, 2 );
针对此测试运行 prove 会导致失败:
$ prove test.tap
test.tap .. No subtests run
Test Summary Report
-------------------
test.tap (Wstat: 0 Tests: 0 Failed: 0)
Parse errors: No plan found in TAP output
Files=1, Tests=0, 0 wallclock secs ( 0.02 usr + 0.00 sys = 0.02 CPU)
但是 Perl 给出了一个看似有效的 TAP 输出:
$ perl test.tap
1..2
ok 1
ok 2
prove 版本是:
$ prove --version
TAP::Harness v3.35 and Perl v5.22.1
另外,我发现在测试文件上添加shebang#!会导致测试结果间歇性通过
#!/usr/bin/perl
use Test::More tests => 2;
is( 1, 1 );
is( 2, 2 );
成功时(4 次通过 ~1 次):
t/test.tap .. ok
All tests successful.
Files=1, Tests=2, 0 wallclock secs ( 0.03 usr 0.00 sys + 0.01 cusr 0.00 csys = 0.04 CPU)
Result: PASS
我还发现将文件重命名为test.t 会导致每次测试都通过。
在尝试在旧版本中查找错误时,我已在运行 Ubuntu 16.04.2 的全新 DigitalOcean Droplet 和具有 TAP::Harness v3.36_01 和 Perl v5.24.1 的 Debian 8 主机上复制了此问题。
我希望避免“将所有文件重命名为 .t 扩展名”作为答案。我不确定TAP::Harness 认为这两个扩展之间的区别是什么,并且找不到任何文档或源代码中的区别所在。
非常感谢您对正在发生的事情进行任何澄清。
【问题讨论】:
-
你需要告诉它如何运行测试:
prove --exec /bin/perl test_more.tap -
我已经用 shebang 线确认了间歇性传递,并且很想知道它是如何传递的......当我使用 file-option extensions 参数来证明时,我也会遇到同样的情况:它通过了大约 1/4 的时间。