2012-04-03 8 views
-1

VisualPHPUnit Test erhalten wird.VisualPHPUnit - Versuch, die Eigenschaft von Nichtobjekt zu erhalten, wenn eine Eigenschaft des Objekts

Nein, es ist kein Array.

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); 
      } 
     } 
    } 


} 

Auch Ausgang:

Debugging Output 
19 

So ist es tatsächlich funktioniert. Was?

Auch scheinbar objs $ kein Array ...

bearbeiten zu klären: Ich änderte testGetChildren wie so:

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

und bekam dies als Antwort:

NULL Warnung: assert(): Assertion fehlgeschlagen

+0

Aus dem Code, den Sie veröffentlicht haben $ objs * ist * ein Array. $ objs [19] ist ein Element dieses Arrays und dies scheint ein Objekt von stdClass zu sein. – liquorvicar

+0

Sie würden das denken, nicht wahr? Anscheinend ist es ein NULL. Kurioserweise wird der Test jedoch erfolgreich abgeschlossen. – Esa

Antwort

1

Okay, ich weiß der Grund für den Fehler ist, weil die Funktion testGetChildren - ignorieren Fall - den gleichen Namen wie die Klasse.

Also, wahrscheinlich interpretiert es die Funktion als Konstruktor, der die Klasse erbt, die er erbt.

0

Liquorvicar hat recht, $ objs ist ein Array und mehr - Sie drucken nur die ID dieses $ objs -arrays 20th object (da Array von 0 bis 19 geht). Es funktioniert also gut. Wenn Sie versuchen, print_r ($ objs), das ist ein Array.

+0

Nein, nein. Ich erhalte die Anweisung "Versuche, eine Eigenschaft eines Nicht-Objekts zu erhalten", speziell von dieser Zeile "print_r". – Esa

+0

Dann rufen Sie nicht 'Setup', ist das nicht ganz offensichtlich? Während Sie nur einen Teil des Codes sehen, ist es schwer zu sagen, was Sie tun und was nicht. – raPHPid

+0

Ah. Es ist eine Testklasse in VisualPHPUnit. Wenn Setup nicht ausgeführt wird, obwohl --- warum bekomme ich die richtige Ausgabe von print_r? Ich habe den kompletten Testcode hinzugefügt. Was ich wahrscheinlich hätte tun sollen. – Esa

Verwandte Themen