VisualPHPUnit - 获取对象属性时尝试获取非对象的属性

时间:2012-04-03 05:51:33

标签: php phpunit

VisualPHPUnit测试。

不,这不是阵列。

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不是数组...

编辑以澄清: 我改变了testGetChildren:

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

并将此作为回应:

  

NULL警告:assert():断言失败

2 个答案:

答案 0 :(得分:1)

好的,我知道错误的原因是因为函数testGetChildren有 - 忽略大小写 - 与类同名。

所以,可能它将函数解释为构造函数,这会混淆它继承的类。

答案 1 :(得分:0)

Liquorvicar是对的,$ objs是一个数组,还有更多 - 你只是打印那个$ objs -arrays第20个对象的ID(因为数组从0到19)。所以它工作正常。如果你尝试print_r($ objs),那就是一个数组。