VisualPHPUnit - Попытка получить свойство необъекта при получении свойства объекта - PullRequest
0 голосов
/ 03 апреля 2012

VisualPHPUnit test.

Нет, это не массив.

class TestGetChildren extends PHPUnit_Framework_TestCase
{
    protected $objs;
    protected function setUp()
    {
        $objs = array();
        $i=0;
        while ($i<20) {
            $obj = (object) array (
                'ID'=>$i,
                'DIRID'=>0
            );
            if ($i>5) $obj->DIRID = $i-6;
            if ($i>10) $obj->DIRID = 7;
            $objs[] = $obj;
            $i++;
        }
        $this->objs = $objs;
    }

    public function testGetChildren() {
        $objs = $this->objs;
        //var_dump($objs);
        print_r(gettype($objs));
        assert('array' == gettype($objs));
        print_r($objs[19]->ID);
        $vm = new FoldersPermissions($objs);

        //$children =   $vm->getChildren($vm->folders[0]);
        foreach ($vm->folders as $obj) {
            $children = $vm->getChildren($obj);
            print_r($obj->ID."|".count($children)."\n");
            // 0 is a special case, and 1 has 10 children
            if (4 >= $obj->ID && 1 < $obj->ID) {
                //print_r(($children));
                $this->assertTrue(1 == count($children));
            }
            if (7 == $obj->ID){
                $this->assertTrue(count($children) == 9);
            }
        }
    }


}

Кроме того, вывод:

Debugging Output
19

Так оно и есть на самом делеработает.Что?

Также, очевидно, $ objs не является массивом ...

edit , чтобы уточнить: я изменил testGetChildren примерно так:

public function testGetChildren() {
    $objs = $this->objs;
    //var_dump($objs);
    print_r(gettype($objs));
    assert('array' == gettype($objs));

и получил это в ответ:

NULL Предупреждение: assert (): утверждение не удалось

Ответы [ 2 ]

1 голос
/ 05 апреля 2012

Хорошо, я знаю, что причина ошибки в том, что функция testGetChildren имеет - игнорируя регистр - то же имя, что и класс.

Так что, вероятно, она интерпретирует функцию как конструктор, который путает класс, который она наследует.

0 голосов
/ 03 апреля 2012

Liquorvicar прав, $ objs - это массив, и многое другое - вы просто печатаете идентификатор этого $ objs -arrays 20-го объекта (так как массив идет от 0 до 19).Так что все работает отлично.Если вы попробуете print_r ($ objs), это массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...