2009-11-13 26 views
5

Estoy intentando crear un objeto simulado en PHP y PHPUnit. Hasta el momento, tengo esto:Configuración de métodos múltiples en PHPUnit objetos simulados

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

Haciendo caso omiso de mis nombres de objeto horriblemente ambiguas para el minuto, entiendo que lo que he hecho es
- Creación de un objeto de burla, con 2 métodos para configurar,
- Se configuró el método 'get_events' para devolver una matriz en blanco, y
- Se dejó la simulación en el constructor.

Lo que me gustaría hacer ahora es configurar el segundo método, pero no encuentro nada que explique cómo hacerlo. Quiero hacer algo como

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

o algo así, pero eso no funciona. ¿Cómo debo hacer eso?

Tangencialmente, ¿esto indica que he estructurado mal mi código, si necesito configurar más de un método para probar?

Respuesta

9

que no tienen ninguna experiencia con PHPUnit, pero creo que ha de ser algo como esto:

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

¿Lo has probado ya?


Editar:

Ok, haciendo un poco de búsqueda de código, he encontrado algunos ejemplos que pueden ayudarle a cabo

Marque esta example

Lo usan como esto:

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

¿Tal vez su problema es otro?

Avísame si eso sirvió.


Edit2:

¿Se puede probar esto:

$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

Yo probé eso, y no se parecía a trabajar. –

+0

Parece que de hecho es la forma correcta. Verifica mi edición Tal vez hay algo más mal? Si compartes un fragmento de código más completo, tal vez otros o yo podamos ayudarte. –

+0

Lo intenté de nuevo, y funcionó. ¡Gracias por tu ayuda! –

Cuestiones relacionadas