我有一个库,直到有人在GitHub上创建了一个问题,我才注意到它发出了弃用警告。
error_reporting(E_ALL);
字符串
并修复了所有的弃用警告。但问题是:如果有弃用警告,你能让代码总是失败吗(我想到了单元测试)?我在想也许可以添加ob_
缓冲和正则表达式来测试是否没有警告并抛出错误。但这需要一些看起来不太漂亮的代码。
有没有一种简单的方法来切换一些选项来使警告成为真实的错误?所以单元测试不通过,代码总是失败?我希望我的代码是面向未来的,当PHP决定用真实的错误替换弃用时不会失败。
2条答案
按热度按时间9q78igpj1#
但问题是:你能让代码总是失败吗(我想到单元测试)
使用
<phpunit
failOnDeprecation="true"
>
属性,当测试期间发生弃用(E_DEPRECATED
、E_USER_DEPRECATED
或PHPUnit弃用)时,PHPUnit在标准测试运行器中显示D
。这将使它总是失败。
命令行选项也存在,来自
phpunit --help
调用:| 开关|描述|
| --|--|
|
‑‑display‑deprecations
个| * “显示测试触发的弃用详细信息”。查看每个D
背后的内容。||
‑‑fail‑on‑deprecation
| * “Signal failure using shell exit code when a deprecation was triggered”.这与上面的failOnDeprecation
XML属性等效。||
‑‑stop‑on‑deprecation
个| * “Stop after first test that triggered a deprecation”*.快速失败。这是stopOnDeprecation
XML属性。|不是在(你的)PHP语言弃用的情况下,但也许值得注意的是未来的访问者:
PHPUnit不填充有关
@
的信息-抑制触发的E_USER_DEPRECATED
错误。Xdebug扩展的ini设置的命令行参数(非PHPUnit)。正确设置xdebug.mode
,对于xdebug.scream
,必须启用development helpers²(-d xdebug.mode=develop
,通常为默认值)。如果PHPUnit还需要Xdebug的其他功能,例如codecoverage,请在模式后面添加逗号(“,”)。更多信息请参见Xdebug文档。failOnDeprecation
属性- PHPUnit 5. XML配置文件mlmc2os52#
是的,你可以让你自己的PHP脚本处理所有(可处理的)错误,包括
E_DEPRECATED
/E_USER_DEPRECATED
,通过你自己的错误处理函数将它们转换为异常。参见PHP's
set_error_handler()
function。它允许你定义一个自定义的错误处理程序,每当错误发生时就会被调用(默认为E_ALL
级别,不包括一些致命的核心错误,并忽略这样的处理程序,在其手册页面上有明确的说明)。字符串
在 * 单元测试框架注册了它自己的处理程序之后注册它,或者相应地与测试框架进行通信,例如根据配置。请参阅他们的功能列表,上面是纯PHP代码。