gpt4 book ai didi

perl - 如何手动创建 TAP 输出

转载 作者:行者123 更新时间:2023-12-04 12:41:39 26 4
gpt4 key购买 nike

有一个很棒的 Perl 模块
Test::More每个人都用于
单元测试。这是非常简单的脚本t/sample_1.t :

use Test::More tests => 1;

fail('This test fails');

我想编写做同样事情的脚本,但没有
Test::More .

我已经阅读了几个关于 TAP(测试任何协议(protocol))的文档,以了解如何编写脚本。我读了:
  • Wikipedia article about TAP
  • TAP specification

  • 不幸的是,文档还不够。我不得不检查使用 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这两个脚本输出不同的东西。 prove 中的“# Failed test 'This test failed'”行对于不同的测试,显示在不同的行上。这是屏幕截图:

    Perl prove output for 2 sample unit tests

    我编写了一个使用 Capture::Tiny 的测试脚本检查两个脚本的 STDERR、STDOUT 和退出代码是否相同。该脚本显示两个脚本输出相同的内容。

    我已将所有测试文件和测试脚本存储在 GitHub repo .

    我的问题。我应该如何在没有 Test::More 的情况下编写 Perl 单元测试以获得与 Test::More 相同的输出。

    PS如果你有兴趣我为什么需要这个。我需要这个来解决 the issue我的 Perl 模块 Test::Whitespaces .

    最佳答案

    虽然我完全不知道发生了什么,但我可以通过在 STDERR 的任何其他输出之前包含以下内容来使输出匹配(至少在视觉上):

    print STDERR "\r";

    这使得它们在运行 prove 时在视觉上匹配。或普通的旧 perl .然而,这不是 Test::More 所做的。

    您输出的 TAP 符合规范;如果 prove想要区别对待 TAP 测试::More 正在输出,我认为这是 prove 中的一个错误(或至少是一个奇怪的问题) .就个人而言,当我编写测试模块时,我总是使用 Test::Builder 或包装的 Test::More 来输出 TAP。每一个都是一个核心模块。这似乎是大多数测试模块倾向于做的事情。

    关于perl - 如何手动创建 TAP 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17383186/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com