scriptfusion/phpunit-immediate-exception-printer

在测试过程中立即打印异常和断言失败。

3.4.0 2024-07-25 22:35 UTC

This package is auto-updated.

Last update: 2024-09-18 23:11:30 UTC


README

Pip

Latest version Total downloads Build status Test coverage

PHPUnit 立即打印器

Pip 是一个 PHPUnit 扩展,可以在测试运行期间立即打印异常和断言失败。通常 PHPUnit 会将失败详情保密,直到测试运行结束,但有时我们不想等待那么久。使用 Pip,所有秘密都会立即揭露,还有一些额外的优势。

优势

  • 执行每个测试用例时显示其名称。
  • 以分层颜色带显示每个测试的执行时间。
  • 立即打印发生的异常、断言失败、警告、注意和弃用消息。
  • 无瑕疵测试套件指标:如果之前的测试失败,则成功点变成红色感叹号。对于没有滚动回缓冲区的 CI 控制台非常有用。

预览

以下预览有些不典型,但可以一次性显示所有支持的输出情况。当然,我们期望所有 您的 测试结果大多是绿色的!

Preview image

Pip 不会尝试修改测试摘要;只有运行时输出被更改。

使用方法

  1. 将依赖项添加到您的 Composer 文件的 require-dev 部分。

    composer require --dev scriptfusion/pip
  2. 在您的 phpunit.xml 配置文件中声明打印机扩展。

    <extensions>
        <bootstrap class="ScriptFUSION\Pip\PipExtension"/>
    </extensions>
  3. 运行测试!

    vendor/bin/phpunit
  4. 享受立即的测试执行反馈。

配置

可以通过在 phpunit.xml 中添加 <parameter> 节点作为 <bootstrap> 节点的子节点来自定义 Pip 的行为,其中 namevalue 属性对应下表中的内容。

要求

测试 Pip

通过 CapabilitiesTest 利用打印机的功能。然而,该测试文件不是直接运行的,因为许多测试都是设计为失败的。相反,我们编写了测试来在内部运行 PHPUnit,每个测试都调用一个能力测试用例并验证其输出。

真正的测试,也称为 功能测试,位于 test/functional 中,以 PHPT 格式编写。PHPT 是一种 几乎未记录的格式,旨在支持 测试 PHP 本身。PHPUnit 的一个未记录的功能是它对其 PHPT 测试规范子集的支持有限,我们利用这一点使用我们的打印机实现来测试 PHPUnit 本身。

要运行测试,只需在项目目录中从命令行指定 vendor/bin/phpunit -c test。默认情况下,我们运行所有功能 PHPT 测试。要运行 CapabilitiesTest,请指定 vendor/bin/phpunit -c test test/CapabilitiesTest

编写功能测试

要测试特定能力的输出,我们使用 CapabilitiesTest--filter 选项来针对特定的测试用例。每个功能测试都包含在文件的 --ARGS-- 部分中传递给 PHPUnit 的参数。这些参数可以直接粘贴在 PHPUnit 命令之后,以查看该测试用例的结果输出。我们在文件的 --EXPECTF-- 部分中验证输出。

我们必须克服的一个挑战是验证彩色输出,包括ANSI转义序列。要查看这些转义序列,我们可以将特定功能测试的输出通过管道传递给cat -v,如下例所示。

vendor/bin/phpunit -c test --colors=always test/CapabilitiesTest.php --filter ::testSuccess$ | cat -v

cat的输出将把“转义”字符打印为^[。我们必须将这个字符序列的每个出现都替换为实际的转义字符(ASCII字符27)。获取实际转义字符的最简单方法是从现有的功能测试中复制它。

通过复制现有测试作为模板来创建一个新的功能测试,然后修改PHPUnit参数和预期输出,以匹配我们刚刚描述的技术所期望的结果。别忘了在--TEST--部分为测试提供一个清晰的描述!

灵感

感谢以下开源项目,这些项目启发了本项目。