【问题标题】:PHPUnit test failing on pluginPHPUnit 插件测试失败
【发布时间】: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


【解决方案1】:

要在 Zend 环境中设置 PHPUnit,您必须在 phpunit 引导程序中启动 Zend 引导程序。在此之后,您的应用程序中仍然有一个引导对象。 你的错误信息说Zend_Controller_Front::getInstance()->getParam('bootstrap') 一片空白。您确定您在正确的位置进行了调试吗?

【讨论】:

  • 不,它不为空,它是一个巨大的转储。该摘录是为了表明它是一个对象。但是,唉,我将不得不对如何测试(或不使用)静态方法进行一些研究。我正在通过 phpunit.xml 运行一个测试套件,它的引导很好。
猜你喜欢
  • 2013-07-28
  • 2017-06-24
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 2014-05-26
  • 2013-05-04
  • 2015-10-31
相关资源
最近更新 更多