2009-11-13 16 views
5

Ich versuche ein Mock-Objekt in PHP und PHPUnit zu erstellen. Bisher habe ich dies:Mehrere Methoden in PHPUnit Mock-Objekten konfigurieren

$object = $this->getMock('object', 
         array('set_properties', 
           'get_events'), 
         array(), 
         'object_test', 
         null); 

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())); 

$mo = new multiple_object($object); 

Ignorieren meine hideously mehrdeutige Objektnamen für die Minute, ich verstehe, dass das, was ich getan habe, ist
- Erstellt ein Mock-Objekt, mit 2 Methoden zu konfigurieren,
- Konfiguriert die Methode 'get_events', um ein leeres Array zurückzugeben, und
- Hat den Mock in den Konstruktor geworfen.

Was ich jetzt tun möchte, ist die zweite Methode zu konfigurieren, aber ich kann nichts finden, das erklärt, wie man das macht. Ich möchte etwas wie

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())) 
    ->expects($this->once()) 
    ->method('set_properties') 
    ->with($this->equalTo(array())) 

oder so etwas tun, aber das funktioniert nicht. Wie soll ich das machen?

Tangential, zeigt dies an, dass ich meinen Code schlecht strukturiert habe, wenn ich mehr als eine Testmethode konfigurieren muss?

Antwort

9

Ich habe keine Erfahrung mit PHPUnit, aber meine Vermutung wäre so etwas wie dieses:

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())); 
$object 
    ->expects($this->once()) 
    ->method('set_properties') 
    ->with($this->equalTo(array())); 

Haben Sie es schon versucht?


Edit:

Ok, indem Sie einige Code-Suche zu tun, ich einige Beispiele gefunden, die Sie aus

prüfen diese example

Sie es so helfen könnten verwenden:

public function testMailForUidOrMail() 
{ 
    $ldap = $this->getMock('Horde_Kolab_Server_ldap', array('_getAttributes', 
                  '_search', '_count', 
                  '_firstEntry')); 
    $ldap->expects($this->any()) 
     ->method('_getAttributes') 
     ->will($this->returnValue(array (
             'mail' => 
             array (
              'count' => 1, 
              0 => '[email protected]', 
            ), 
             0 => 'mail', 
             'count' => 1))); 
    $ldap->expects($this->any()) 
     ->method('_search') 
     ->will($this->returnValue('cn=Gunnar Wrobel,dc=example,dc=org')); 
    $ldap->expects($this->any()) 
     ->method('_count') 
     ->will($this->returnValue(1)); 
    $ldap->expects($this->any()) 
     ->method('_firstEntry') 
     ->will($this->returnValue(1)); 
(...) 
} 

Vielleicht ist Ihr Problem woanders?

Lassen Sie mich wissen, ob das geholfen hat.


Edit2:

Können Sie dies versuchen:

$object = $this->getMock('object', array('set_properties','get_events')); 

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())); 
$object 
    ->expects($this->once()) 
    ->method('set_properties') 
    ->with($this->equalTo(array())); 
+0

Das habe ich versucht, und es hat nicht zu funktionieren scheint. –

+0

Es sieht in der Tat so aus. Überprüfen Sie meine Bearbeitung. Vielleicht stimmt etwas nicht? Wenn Sie etwas vollständiger Code teilen, könnten andere oder ich helfen können. –

+0

Versuchte es noch einmal, und es hat funktioniert. Danke für Ihre Hilfe! –

Verwandte Themen