为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
米脂 2021-10-22 15:14:44
我正在尝试将 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,只有扩展文件夹。
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

您可以在测试中初始化所需的环境,例如:


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;来确保在测试后重置环境。


查看完整回答
反对 回复 2021-10-22
  • 1 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信