2009-11-13 5 views
5

J'essaie de créer un objet fantaisie en PHP et PHPUnit. Jusqu'à présent, j'ai ceci:Configuration de plusieurs méthodes dans les objets mock PHPUnit

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

Ignorer mes noms d'objets affreusement ambigus pour la minute, je comprends que ce que je l'ai fait est
- Création d'un objet fantaisie, avec 2 méthodes pour configurer,
- Configuré la méthode 'get_events' pour retourner un tableau vide, et
- Dropped le simulacre dans le constructeur.

Ce que je voudrais faire maintenant est de configurer la deuxième méthode, mais je ne trouve rien qui explique comment faire cela. Je veux faire quelque chose comme

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

ou une telle, mais cela ne fonctionne pas. Comment devrais-je faire ça? Cela indique-t-il tangiblement que j'ai mal structuré mon code, si j'ai besoin de configurer plus d'une méthode pour tester?

Répondre

9

Je n'ai aucune expérience avec PHPUnit, mais je pense serait quelque chose comme ceci:

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

Avez-vous déjà essayé?


Edit:

Ok, en faisant une recherche de code, j'ai trouvé quelques exemples qui pourraient vous aider

Cocher cette example

Ils l'utilisent comme ceci:

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

Peut-être que votre problème est ailleurs? Faites-moi savoir si cela a aidé.


Edit2:

Pouvez-vous essayer:

$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

Je l'ai fait essayer, et il ne semble pas fonctionner. –

+0

On dirait que c'est effectivement la bonne façon. Vérifiez ma modification. Peut-être qu'il y a autre chose qui ne va pas? Si vous partagez un morceau de code plus complet, peut-être d'autres ou je serais en mesure d'aider. –

+0

Essayé à nouveau, et cela a fonctionné. Merci de votre aide! –

Questions connexes