2011-07-18 2 views
19

J'écris des tests fonctionnels pour un système SOA, donc j'ai besoin de tester un sous-système backend depuis le frontend.Une façon de préserver les variables d'instance entre les tests phpunit?

C'est un système CRUD standard. J'ai un test qui teste je peux créer un objet, et il me renvoie l'ID du nouvel objet. Dans les tests suivants, je veux éditer et ensuite supprimer cet objet, mais phpunit semble ré-instancier la classe de test à chaque fois, donc je perds mes variables d'instance.

Comment puis-je y parvenir? L'exécution de tests fonctionnels sur chaque serveur de l'architecture n'est pas une option.

+3

une chose à Gardez à l'esprit que PHPUnit crée une nouvelle instance de votre scénario de test pour chaque méthode de test * avant d'exécuter les tests. * –

+3

Une chose à garder à l'esprit est que PHPUnit a ** mauvaise conception ** ... – inf3rno

Répondre

0

Je suppose que je vais simplement lancer le test 'create' avant d'exécuter 'edit' ou 'delete', et régler la variable d'instance en conséquence.

32

Une façon de passer des choses entre les tests est d'utiliser l'annotation @depends

public function testCreate() { 
    //... 
    return $id; 
} 

/** 
* @depends testCreate 
*/ 
public function testDelete($id) { 
    // use $id 
} 

si vous le faites comme le test « supprimer » sera ignorée si la création ne fonctionne pas.

Ainsi, vous obtiendrez seulement une erreur si le service ne fonctionne pas du tout au lieu de nombreux tests qui échouent.


Si vous ne voulez pas faire ou qui ne correspond pas à votre cas pour une raison quelconque variables de classe statique peut également être une option, mais vous devriez être vraiment sûr que vous savez que vous devez absolument les:)

+0

J'ai exactement les mêmes noms de méthode que je cherchais une solution pour: D – Jekis

4

Puisque vous voulez exécuter chaque testcase une fois, vous pouvez stocker les variables d'instance au niveau de la classe, par exemple dans les variables statiques, ou dans un singleton externe/magasin global utilise get_class($testCase) pour les clés ...

Questions connexes