mfn/phpunit-immediate-exception-printer

此包已被弃用且不再维护。作者建议使用 scriptfusion/phpunit-immediate-exception-printer 包。

在测试期间立即打印异常和断言失败。

5.0.0 2020-02-08 19:33 UTC

This package is auto-updated.

Last update: 2020-11-06 16:20:07 UTC


README

Immediate Exception Printer 是一个 [PHPUnit][PHPUnit] 插件,在测试运行期间立即打印出异常和断言失败。通常 PHPUnit 会将错误详情保密到测试运行结束,但有时我们不想等待那么长时间。Immediate Exception Printer 可以立即揭示所有秘密,还有一些额外的优势。

优势

  • 立即打印出发生的异常和断言失败。
  • 完美的测试套件指示器:如果之前的测试失败,成功的点会变成红色的感叹号。
  • 以分层颜色带显示每个测试的执行时间。
  • 显示正在执行的每个测试用例的名称。

预览

以下预览略有不同,但展示了所有支持的输出情况。

Preview image

此打印机不会尝试修改测试摘要;仅更改运行时输出。

使用方法

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

    composer require --dev mfn/phpunit-immediate-exception-printer
  2. 在您的 phpunit.xml 配置文件 中声明打印机类。

    <phpunit
        printerClass="Mfn\PHPUnitImmediateExceptionPrinter\ImmediateExceptionPrinter"
        colors="true"
    >
  3. 运行测试!如果您没有更新 phpunit.xml,则可以在命令行上指定相同的选项。

    vendor/bin/phpunit --printer 'Mfn\PHPUnitImmediateExceptionPrinter\ImmediateExceptionPrinter' --color
  4. 享受立即的测试执行反馈。

配置

您可以在项目根目录中放置一个 phpunit-printer.ini 文件。

选项

属性名称 默认值 描述
onlyShowErrorProgress false 仅输出失败的测试,而不是所有测试

需求 / 支持版本

此库 PHPUnit 版本 PHP 版本
^3.0|^4.0 ^8.5 ^7.2
^5.0 ^9.0 ^7.3

测试

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

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

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

编写功能测试

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

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

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

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

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

灵感来源

感谢以下开源项目,它们启发了本项目。继续保持精彩 👍。

此外,此包是从 https://github.com/workivate/PHPUnit-Immediate-Exception-Printer 分支出来的,该分支又从 https://github.com/ScriptFUSION/PHPUnit-Immediate-Exception-Printer 分支出来的。

在我想要使用最新和最伟大的PHPUnit版本(截至写作时的8.5版)时,这两个项目都没有活动。