как проверить защищенный метод в Zend - PullRequest
1 голос
/ 09 мая 2011

Я хочу протестировать модель в Zend Project,

<?php

//require_once('CustomModelBase.php');

class Application_Model_User extends Custom_Model_Base {


    protected function __construct() {
        parent::__construct();
    }

    static function create(array $data) {

    }

    static function load($id) {

    }

    static function find($name, $order=null, $limit=null, $offset=null) {

        );
    }

}

модель в папке приложения / модели, она расширяет базовый класс Custom_Model_Base, который находится в той же папке, что и класс User.

В моем тесте я пытаюсь создать новый объект User следующим образом

    <?php


class Model_UserTest extends ControllerTestCase

{
    protected $user2;

    public function setUp() {

        parent::setUp();

        $this->user2 = new Application_Model_User2();
    }

    public function testCanDoTest() {
        $this->assertTrue(true);
    }

}

это CustomModelBase.php: абстрактный класс Custom_Model_Base {защищенная функция __construct ($ adaptor = null) {}}

это дает мне ошибку, скажем "PHP Fatal error: класс 'Custom_Model_Base' не найден в \ application \ models \ User.php в строке 4", я включаю "CustomModelBase.php" в User.phpэто дает мне еще одну ошибку: «PHP Fatal error: вызов защищенного Application_Model_User :: __ construct () из контекста Model_User2Test в D: \ PHP \ apache2 \ htdocs \ ID24_Xiao \ tests \ application \ models \ UserTest.php в строке 13»

тогда Как я мог справиться с этим?Кто-нибудь может дать какое-нибудь предложение?

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

Если вы используете 5.3.2 или лучше, вы можете сделать это следующим образом:

public function testCanDoTest() {

    // set method "nameOfProctedMethod" to accessible on Class App...
    $method = new ReflectionMethod(
        'Application_Model_User2', 'nameOfProtectedMethod'
    );

    $method->setAccessible(true);
    $this->assertTrue($method->doSomething());
}
0 голосов
/ 05 августа 2011

Как сказал Джефф, вы можете сделать свой конструктор тестируемым, обнародовав его так:

 public function __construct() { ...
0 голосов
/ 10 мая 2011

Вы не можете вызвать любого защищенного члена класса из-за пределов класса.Либо измените модификатор доступа с защищенного на публичныйИли создайте статическую функцию, которая даст экземпляр этого класса, например

static function getInstance(){
    return new Model_UserTest();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...