如何在 TYPO3 v9 单元测试中模拟、使用或覆盖 Environment::isCli()

我正在尝试将 TYPO3 v8 系统更新为 TYPO3 v9,但是在进行单元测试时,我遇到了一些错误。我能够自己修复其中的一些问题,但这里的这个对我来说是一个非常困难的问题,因为单元测试对我来说一般来说有点新。


我已经在网上搜索了 TYPO3 文档(似乎缺少重要部分?),询问了一些朋友并自己尝试了一些东西,但没有任何帮助。


$this->environmentMock = $this->createMock(Environment::class);

$this->environmentMock->expects($this->once())

    ->method("::isCli")

    ->will($this->returnValue(TRUE));

我希望手动覆盖 Environment 类附带的静态函数 ::isCli() 。如果这是不可能的,是否还有其他“解决方法”,例如设置受保护的变量或类似的东西?


目前这是我的错误信息:


Trying to configure method "::isCli" which cannot be configured because it does not exist, has not been specified, is final, or is static

提前致谢!


更新 1:

使用@susis tip 后,附加代码时出现以下错误:


TypeError: Return value of TYPO3\CMS\Core\Core\Environment::getContext() must be an instance of TYPO3\CMS\Core\Core\ApplicationContext, null returned

附加信息:我的项目只是一个扩展文件夹,在它自己的 composer.json 中需要 TYPO3 v9 源。没有网页,没有 htdocs,只有扩展文件夹。


米脂
浏览 170回答 1
1回答

大话西游666

您可以在测试中初始化所需的环境,例如:Environment::initialize(        Environment::getContext(),        true,        false,        Environment::getProjectPath(),        Environment::getPublicPath(),        Environment::getVarPath(),        Environment::getConfigPath(),        Environment::getBackendPath() . '/index.php',        Environment::isWindows() ? 'WINDOWS' : 'UNIX'    );这与在 TYPO3 Core 测试中完成的方式相同,并允许您自定义完整的环境。如果您使用 TYPO3 测试框架/UnitTestCase 基类,则可以使用该属性protected $backupEnvironment = true;来确保在测试后重置环境。
打开App,查看更多内容
随时随地看视频慕课网APP