【发布时间】:2011-01-24 14:31:37
【问题描述】:
我的 phpunit 测试失败并出现此错误:
C:\workspace\internal_jets3\tests>phpunit --verbose
PHPUnit 3.5.7 by Sebastian Bergmann.
Fatal error: Call to a member function getOptions() on a non-object in C:\worksp
ace\internal_jets3\library\My\Controller\Plugin\ModuleLayoutLoader.php on line 7
从插件中提取:
class My_Controller_Plugin_ModuleLayoutLoader extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$config = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getOptions();
任何有关如何在测试中包含插件的帮助都会有所帮助。谢谢!
编辑@Gordon 这对我来说并不是那么明显。 做一个var_dump:
var_dump(Zend_Controller_Front::getInstance()->getParam('bootstrap'));
die();
给我:
object(Bootstrap)[3]
protected '_appNamespace' => boolean false
protected '_resourceLoader' => null
protected '_application' =>
对我说“反对”;转储的一半是:
protected '_options' =>
所以这让我很困惑 - 我不熟悉如何正确 phpunit 测试这个对象。
【问题讨论】:
-
这就是为什么静态方法、单例和链接(按顺序)如此难以测试和破坏可维护性的原因......
-
嗯,错误信息很明显,不是吗?您试图在不是对象的东西上调用方法。确保
Zend_Controller_Front::getInstance()->getParam('bootstrap')确实按照您的想法行事。 -
你什么时候做的 var_dump ?在 phpunit 的测试期间或在您的应用程序的正常执行期间?
-
@Marcin,我在静态方法行之前做了。但是我已经删除了这个插件,我目前只是通过控制器初始化中的动作助手更改模块,因为我现在只需要它在 1 个模块上。
标签: zend-framework plugins phpunit bootstrapping