Zend Framework, HelperBroker PHPUnit Test

Это очень специфический вопрос, и я много гуглил для потенциального решения, но ничего, что указывало бы мне в правильном направлении. Я написал Zend_Controller_Action_Helper, чтобы помочь мне обрабатывать некоторые формы в моем приложении. Теперь в приложении он работает нормально, но, похоже, сломал мои тесты. Если я закомментирую строки, которые добавляют помощника в брокер, все будет работать нормально, но это приведет к поражению объекта. Ошибка, которую я получаю,

Fatal error: Class 'PHPUnit_Framework_Error_Notice' not found in /Users/chris/NetBeansProjects/myProject/library/ProcessForm.php on line 25

Чего я не понимаю, так это почему он выдает эту ошибку в строке 25, которая специально

public function processForm($aParam)

Поэтому я полагаю, что должен вставить код, чтобы показать вам часть приложения. Я добавляю этот помощник в начальную загрузку моего приложения вот так.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initHelpers()
    {
        // If I comment out these lines it all works
        require_once 'ProcessForm.php';
        Zend_Controller_Action_HelperBroker::addHelper(
            new ProcessForm()
        );
    }
}

Мой загрузочный файл PHPUnit выглядит так

require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';

abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{

    protected $application;

    public function setUp()
    {
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp();
        $this->getFrontController()->setParam('bootstrap', $this->application->getBootstrap());
    }

    public function appBootstrap()
    {
        $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
        $this->application->bootstrap();
    }


}

Фактический помощник выглядит так

class ProcessForm extends Zend_Controller_Action_Helper_Abstract
{
    /**
     * @var Zend_Loader_PluginLoader
     */
    public $pluginLoader;

    /**
     * Constructor: initialize plugin loader
     *
     * @return void
     */
    public function __construct()
    {
        $this->pluginLoader = new Zend_Loader_PluginLoader();
    }

    public function processForm($aParam)
    {
    }

    public function direct($aParam)
    {
        return $this->processForm($aParam);
    }
}

person Catharsis    schedule 21.10.2010    source источник
comment
2 предложения: поскольку кажется, что он не может найти PHPUnit_Framework_Error_Notice, вы проверили, присутствует ли файл? ( Zend/Test/PHPUnit/Framework/Error/Notice.php), и ошибка, похоже, исходит от конструктора ProcessForm. Так что, может быть, в другом классе $this->pluginLoader = new Zend_Loader_PluginLoader();   -  person Shikiryu    schedule 21.10.2010
comment
Он не существует на пути, который вы предлагаете, но он является частью PHPUnit, который находится на пути   -  person Catharsis    schedule 21.10.2010


Ответы (1)


Я обнаружил, что проблема заключается в том, что решение оказывается (я думаю, это вещь php 5.3), если я переименую основную функцию во что-то еще, она будет работать. Например.

class ProcessForm extends Zend_Controller_Action_Helper_Abstract
{
    /**
    * @var Zend_Loader_PluginLoader
    */
    public $pluginLoader;

    /**
    * Constructor: initialize plugin loader
    *
    * @return void
    */
    public function __construct()
    {
        $this->pluginLoader = new Zend_Loader_PluginLoader();
    }

    public function doThis($aParam)
    {
    }

    public function direct($aParam)
    {
        return $this->doThis($aParam);
    }
}

Я думаю, это потому, что в php 5.3 вам разрешено создавать свой класс с помощью __construct или myClass, но эта функциональность теперь устарела, если я прав.

person Catharsis    schedule 22.10.2010