我在课堂上使用它,我对以下版本进行了测试:
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
require_once ExtensionManagementUtility::siteRelPath('my_ext') . 'Lib/ServiceLoader.php';
class Tx_MyOtherExt_Domain_Service_SearchService implements SingletonInterface
然后在我的测试中,我得到了该类的实例,如下所示:
/** @var \Tx_MyOtherExt_Domain_Service_SearchService $service */
$service = GeneralUtility::makeInstance('\Tx_MyOtherExt_Domain_Service_SearchService');
但是,测试会抛出错误:
Fatal error: main(): Failed opening required 'typo3conf/ext/my_ext/Lib/ServiceLoader.php' (include_path='C:/xampp/htdocs/my_proj/site/typo3/contrib/pear/;.;C:\xampp\php\PEAR')
如何将网站根添加到包含路径? PHPSTORM设置(设置 - > PHP)似乎没有什么区别。
注意:当然,将站点根目录添加到php.ini中的include_path设置。但是,由于每个项目的路径都会发生变化,因此通过PHPSTORM进行设置将是最好的。
答案 0 :(得分:0)
如何使用常量PATH_site
获取绝对路径?
https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/GlobalValues/Constants/Index.html
答案 1 :(得分:0)
有些事情你应该改进编写代码。首先,它还涉及改变运行代码。
使用注入
如果您的代码中需要单独的类,请使用例如构造函数注入将对象注入属性。通过使用$this->getAccessibleMock
的第5个参数调用false
,原始构造函数不会调用,您可以使用` - > _set(' name',$)伪造对象OBJ)``
<强> GeneralUtility :: makeInstance 强>
不要在测试中使用它,而是new()
。如果测试中断,您的代码是错误的,应该更改而不是围绕它构建测试代码!