2008-11-22 8 views
53

C'est ce que j'ai:Comment tester un second paramètre dans un objet simulé PHPUnit

$observer = $this->getMock('SomeObserverClass', array('method')); 
$observer->expects($this->once()) 
     ->method('method') 
     ->with($this->equalTo($arg1)); 

Mais la méthode doit prendre deux paramètres. Je ne fais que tester que le premier paramètre est passé correctement (comme $ arg1).

Comment tester le deuxième paramètre?

Répondre

85

Je crois que la façon de le faire est:

$observer->expects($this->once()) 
    ->method('method') 
    ->with($this->equalTo($arg1),$this->equalTo($arg2)); 

Ou

$observer->expects($this->once()) 
    ->method('method') 
    ->with($arg1, $arg2); 

Si vous devez effectuer un autre type d'affirmation sur la 2ème arg, vous pouvez le faire aussi:

$observer->expects($this->once()) 
    ->method('method') 
    ->with($this->equalTo($arg1),$this->stringContains('some_string')); 

Si vous devez vous assurer un argument passe plusieurs affirmations, utilisez logicalAnd()

$observer->expects($this->once()) 
    ->method('method') 
    ->with($this->logicalAnd($this->stringContains('a'), $this->stringContains('b'))); 
+1

Je l'ai rencontré il y a quelques semaines. Utilisation: -> avec ($ this-> equalTo ($ foo, $ bar) J'ai travaillé pour moi – ieure

+3

@ieure Le deuxième argument de equalTo() est $ delta, donc ça ne fait probablement pas ce que tu penses Est-ce que. –