检查失败的测试输出

我们已经学会了如何创建和运行测试,并且通过测试取得了巨大的成功,但是如果出现问题会发生什么?我们将研究如何使用失败的测试输出文件来帮助自己调试失败的测试。

失败的测试输出文件

如果测试失败,测试结果将被转储到测试文件所在的目录中。每次失败的测试都会发生这种情况。例如,对于失败的测试 001.phpt,您将获得以下输出:

  • 001.log 此测试的输出

  • 001.exp 预期的测试结果

  • 001.out 实际的测试结果

  • 001.diff 预期结果与实际结果之间的差异

  • 001.php 包含失败测试代码的 PHP 代码段

  • 001.sh 运行失败测试的 PHP 代码段的脚本

.sh bash 脚本是失败的 php 脚本的包装器,可轻松使用与测试运行相同的运行时条件重新运行失败的脚本。掌握了所有这些信息后,您就可以开始调试代码了。

检查失败的内联测试输出

将所有这些文件放在文件系统上并不总是很方便。有时您可能只想在屏幕上看到失败的测试输出,与失败的测试内联。run-tests.php 脚本接受标志以启用此类行为 --show-[all|php|exp|diff|out]。例如,如果您想内联查看差异:

./run-tests.php --show-diff
...
TEST 613/14433 [tests/lang/operators/nan-comparison-false.phpt]
========DIFF========
002+ bool(true)
003+ bool(true)
004+ bool(true)
005+ bool(true)
002- bool(false)
003- bool(false)
004- bool(false)
005- bool(false)
========DONE========
...

如果出现差异,则仅当存在实际差异时才会打印。还有标志可以打印跳过条件或清理脚本 --show-[skip|clean]。例如:

./run-tests.php --show-clean
...
PASS Test for buffering in core functions with implicit flush on [tests/func/009.phpt]
TEST 399/14433 [tests/func/010.phpt]
========CLEAN========
<?php
@unlink(dirname(__FILE__).'/010-file.php');
?>
========DONE========
PASS function with many parameters [tests/func/010.phpt]
PASS Test bitwise AND, OR, XOR, NOT and logical NOT in INI via error_reporting [tests/func/011.phpt]
...

甚至还有一个显示慢速测试的标志 --show-slow,它接受毫秒数。在测试运行结束时,将报告运行较慢的测试。假设您要检查 ext/standard/tests/file 中运行时间超过 10 秒的测试:

./run-tests.php --show-slow 10000 ext/standard/tests/file
=====================================================================
SLOW TEST SUMMARY
---------------------------------------------------------------------
(28.043 s) Test fileatime(), filemtime(), filectime() & touch() functions : usage variation [ext/standard/tests/file/005_variation.phpt]
=====================================================================

不幸的是,make 脚本没有环境变量来激活这些标志。但是你仍然可以通过滥用 TESTS 变量来使用它们:

make test TESTS=--show-all