2011-05-17 6 views
4

Dans certains cas, mes méthodes phpunit dépendent de deux classes, j'ai donc décidé d'écrire une méthode dedicate qui va créer une instance de ces deux classes (qui sont liées les unes aux autres) et les transmettra à toutes les méthodes phpunit. Je veux faire quelque chose comme ci-dessous.phpunit - Renvoie deux objets dans le cas de test suivant

public function testGetInstance() 
{ 
    $obj1 = new Class1(); 
    $obj2 = new Class2(); 
    return $obj1, $obj2; //can i use list ? 
}  

/** 
*@depends testGetInstance() 
*/ 
public function testBothFeatures(Class1 $obj1, Class2 $obj2) //how to pass 2 instances?  
{ 
    //Do all operation related to $obj1 and $obj2 
} 

Comment atteindre le cas ci-dessus? Y a-t-il une meilleure approche pour cela?

+1

La «meilleure approche» dépend de * ce * que vous essayez d'atteindre. –

Répondre

3

La réponse courte:

@depends ne fonctionne que pour un seul argument, donc vous devez:

return array($obj1, $obj2); 

public function testBothFeatures(array $myClasses) { 
    $obj1 = $myClasses[0]; 
    $obj2 = $myClasses[1]; 
} 

réponse plus longue:

Que fais-tu là? Utilisez-vous un cas de test PHPUnit pour tester TWO classes réelles?

Si c'est quelque chose que vous devriez habituellement éviter. La seule exception est que vous pourriez faire un test "d'intégration" qui s'assure que de plus grandes parties de votre code fonctionnent ensemble, mais vous ne devriez le faire qu'une fois que vous avez un test unitaire pour chaque classe.

Vous voulez vous assurer que vos classes fonctionnent indépendamment des autres parties de votre application afin que vous puissiez facilement identifier ce que vous avez cassé lorsque vous avez changé quelque chose.

Si vous avez une classe qui dépend d'une autre classe, puis mock out the second class et utilisez cet objet faux pour vous assurer que votre "classe sous test" fonctionne correctement.

+2

Un bon raccourci est d'utiliser 'list ($ obj1, $ obj2) = $ myClasses;' –

2

Cela aurait plus de sens, je suppose?

return array(
    'obj1' => new Class1(), 
    'obj2' => new Class2() 
); 
Questions connexes