2011-10-18 2 views
1

J'ai une classe qui accède aux services web. Il peut éventuellement mettre en cache les résultats. Donc je veux écrire deux classes de test. Le premier (Ws_Test) exécute des tests sans mise en cache. Le second (WsCached_Test) étend le premier et exécute les mêmes tests mais avec le cache activé.PHPUnit - Deux classes de test pour tester le même objet

En théorie cela résout mon problème, mais quand j'exécute 'tous les tests', seule la seconde classe de test (WsCached_Test) est exécutée. On dirait que PHPUnit suppose que la classe a déjà été complètement testée lors de l'exécution de WsCached_Test.

class Ws_Test extends PHPUnit_Framework_TestCase 
{ 
    public function setUp() 
    { 
     $this->ws = new Ws(); 
    } 

    // lots of tests 
} 

class WsCached_Test extends Ws_Test 
{ 
    public function setUp() 
    { 
     $this->ws = new Ws(); 
     $this->ws->setCacheResults(true); 
    } 

    // inherits lots of tests 
} 

Répondre

2

Je ne sais pas si cela va résoudre le problème, mais ma première tentative d'une solution serait de faire la classe abstraite de base et ont deux sous-classes: WsCached_Test et WsUncached_Test.

abstract class BaseWsTester extends PHPUnit_Framework_TestCase 
{ 
    public function setUp() 
    { 
     $this->ws = new Ws(); 
    } 

    // lots of tests 
} 

class WsUncached_Test extends BaseWsTester 
{ 
    // inherits lots of tests 
} 

class WsCached_Test extends BaseWsTester 
{ 
    public function setUp() 
    { 
     parent::setUp(); 
     $this->ws->setCacheResults(true); 
    } 

    // inherits lots of tests 
} 

Le nom BaseWsTester est choisi pour garder PHPUnit de penser qu'il est un test à exécuter, et devrait aider son abstraction. Si cela ne fonctionne pas, déplacez setUp() dans chaque sous-classe et supprimez-le de la classe de base.

+0

Simple et parfait! Je vous remercie! – Marcelo

Questions connexes