mfn / phpunit-immediate-exception-printer
Requires
- php: ^7.3
- phpunit/phpunit: ^9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- phpstan/phpstan: 0.12.3
README
Immediate Exception Printer 是一个 [PHPUnit][PHPUnit] 插件,在测试运行期间立即打印出异常和断言失败。通常 PHPUnit 会将错误详情保密到测试运行结束,但有时我们不想等待那么长时间。Immediate Exception Printer 可以立即揭示所有秘密,还有一些额外的优势。
优势
- 立即打印出发生的异常和断言失败。
- 完美的测试套件指示器:如果之前的测试失败,成功的点会变成红色的感叹号。
- 以分层颜色带显示每个测试的执行时间。
- 显示正在执行的每个测试用例的名称。
预览
以下预览略有不同,但展示了所有支持的输出情况。
此打印机不会尝试修改测试摘要;仅更改运行时输出。
使用方法
-
将依赖项添加到您的 Composer 文件的
require-dev
部分。composer require --dev mfn/phpunit-immediate-exception-printer
-
在您的
phpunit.xml
配置文件 中声明打印机类。<phpunit printerClass="Mfn\PHPUnitImmediateExceptionPrinter\ImmediateExceptionPrinter" colors="true" >
-
运行测试!如果您没有更新
phpunit.xml
,则可以在命令行上指定相同的选项。vendor/bin/phpunit --printer 'Mfn\PHPUnitImmediateExceptionPrinter\ImmediateExceptionPrinter' --color
-
享受立即的测试执行反馈。
配置
您可以在项目根目录中放置一个 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--
部分为测试提供一个清晰的描述!
灵感来源
感谢以下开源项目,它们启发了本项目。继续保持精彩 👍。
- diablomedia/phpunit-pretty-printer – 设计和实现。
- whatthejeff/nyancat-phpunit-resultprinter – 测试。
- skyzyx/phpunit-result-printer – 设计。
此外,此包是从 https://github.com/workivate/PHPUnit-Immediate-Exception-Printer 分支出来的,该分支又从 https://github.com/ScriptFUSION/PHPUnit-Immediate-Exception-Printer 分支出来的。
在我想要使用最新和最伟大的PHPUnit版本(截至写作时的8.5版)时,这两个项目都没有活动。