【发布时间】:2022-01-03 19:10:10
【问题描述】:
大家好,
我正在开发一个 TYPO3 扩展,我遇到了这种非常奇怪的情况。我有一个类的单元测试,但是当我运行它时,我得到了Use of undefined constant LF - assumed 'LF' (this will throw an Error in a future version of PHP) 错误。
LF 字符是 *nix 系统中使用的换行符或换行符。 Windows 正在使用 CRLF 组合。
我在 Windows 10 上,安装了最新版本的 PHP 7.4 和 xdebug。我也有 WSL2 Ubuntu 和 PHP 7.4(没有 xdebug)。我使用 PHPStorm 作为我的 IDE。 PhpUnit 9.5 版。
我在 IDE(Windows 上下文)、CLI(Ubuntu 上下文)和 docker 容器(也是 7.4、alpine Linux)中运行测试时收到此错误消息。
我也在 IDE 中以调试模式运行它,我发现在我的 UT 中的这条语句上抛出了异常:
$pageRendererMock = $this->getMockBuilder(\TYPO3\CMS\Core\Page\PageRenderer::class)
->setMethods(['addJsInlineCode'])
->disableOriginalConstructor()
->getMock();
只要调用getMock(),就会抛出异常。所以我挖得更深。
我得到了 PhpUnit 的 MockClass::generate() 方法。它包含以下 sn-p 代码:
eval($this->classCode);
call_user_func(
[
$this->mockName,
'__phpunit_initConfigurableMethods',
],
...$this->configurableMethods
);
__phpunit_initConfigurableMethods() 方法来自 \PHPUnit\Framework\MockObject\Api 特征。
通过进一步调试,我在MockObject\Api::__phpunit_initConfigurableMethods() trait 的方法中找到了这一行:
if (isset(static::$__phpunit_configurableMethods)) {
我在这一行有一个断点。当我跨过它时,我得到了异常。
有趣的是,代码中的任何地方都没有文字 LF!
你遇到过这个问题吗?你是怎么解决的?
【问题讨论】:
-
我忘了提到我在 repo 中的所有文件都有 Linux 风格的行尾 (
LF) 但我试图将它们转换为 Windows 格式 (CRLF) 但它没有多大帮助。