类中的require_once中断单元测试

时间:2016-03-16 15:34:45

标签: phpunit typo3 phpstorm

我在课堂上使用它,我对以下版本进行了测试:

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进行设置将是最好的。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

有些事情你应该改进编写代码。首先,它还涉及改变运行代码。

使用注入

如果您的代码中需要单独的类,请使用例如构造函数注入将对象注入属性。通过使用$this->getAccessibleMock的第5个参数调用false,原始构造函数不会调用,您可以使用` - > _set(' name',$)伪造对象OBJ)``

<强> GeneralUtility :: makeInstance

不要在测试中使用它,而是new()。如果测试中断,您的代码是错误的,应该更改而不是围绕它构建测试代码!