2009-11-13 4 views
5

Sto cercando di creare un oggetto fittizio in PHP e PHPUnit. Finora, ho questo:Configurazione di più metodi in PHPUnit oggetti fittizi

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

Ignorando i miei nomi degli oggetti orrendamente ambigui per minuto, ho capito che quello che ho fatto è
- Creato un oggetto fittizio, con 2 metodi per configurare,
- Configurato il metodo 'get_events' per restituire un array vuoto, e
- Dropped the mock nel costruttore.

Quello che mi piacerebbe fare ora è configurare il secondo metodo, ma non riesco a trovare nulla che spieghi come farlo. Voglio fare qualcosa come

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

o alcuni di questi, ma che non funziona. Come dovrei farlo?

Tangenzialmente, questo indica che ho strutturato male il mio codice, se ho bisogno di configurare più di un metodo per testare?

risposta

9

non ho alcuna esperienza con PHPUnit, ma la mia ipotesi sarebbe qualcosa di simile:

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

Hai provato già?


Edit:

Ok, facendo qualche ricerca del codice, ho trovato alcuni esempi che potrebbero aiutarvi a uscire

Scegli questa example

lo usano in questo modo:

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

Forse il tuo problema è da qualche altra parte?

Fammi sapere se questo ha aiutato.


Edit2:

Potete provare questo:

$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

Ho provato questo, e non è sembrato funzionare. –

+0

Sembra che sia davvero il modo corretto. Controlla la mia modifica. Forse c'è qualcos'altro che non va? Se condividi qualche pezzo di codice più completo, forse altri o io sarei in grado di aiutarti. –

+0

Provato di nuovo, e ha funzionato. Grazie per l'aiuto! –