2012-04-03 178 views
-1

VisualPHPUnit测试。不,它不是数组。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 

所以它的实际工作。 什么?

而且,显然$ OBJ文件是不是数组...

编辑澄清: 我改变testGetChildren像这样:

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

,并得到这个作为响应:

NULL Warning:assert():断言失败

+0

从您发布的代码$ objs * *是一个数组。 $ objs [19]是该数组的一个元素,这似乎是stdClass的一个对象。 – liquorvicar 2012-04-03 06:08:31

+0

你会这么想,不是吗。显然它是一个NULL。奇怪的是,测试成功完成。 – Esa 2012-04-03 07:11:09

回答

1

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

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

0

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

+0

不,不。我正在从该print_r行中获得“试图获取非对象的属性”通知。 – Esa 2012-04-03 07:04:25

+0

然后你不调用'setup',是不是很明显?虽然只看到代码的一部分,但很难说你做了什么以及你没有做什么。 – raPHPid 2012-04-03 07:20:20

+0

啊。它是VisualPHPUnit中的一个测试类。如果安装程序没有执行,但---为什么我从print_r获得正确的输出?我添加了完整的测试代码。我可能应该首先完成的。 – Esa 2012-04-03 09:39:06