2010-05-30 6 views
0

Je suis novice en PHPUnit et je n'ai pas trouvé un exemple décent de la façon de construire un test complet de bout en bout, et donc, il me reste des questions. L'un d'entre eux est comment puis-je préparer mon environnement pour tester correctement mon code? J'essaye de comprendre comment passer correctement les diverses valeurs de configuration nécessaires pour les méthodes d'installation/démontage de test, et les configs pour la classe elle-même.Comment travailler avec des constructions dans PHPUnit?

// How can I set these variables on testing start? 
protected $_db = null; 
protected $_config = null; 

// So that this function runs properly? 
public function setUp(){ 
    $this->_acl = new acl(
     $this->_db, // The database connection for the class passed 
         // from whatever test construct 

     $this->_config // Config values passed in from construct 
    ); 
} 

// Can I just drop in a construct like this, and have it work properly? 
// And if so, how can I set the construct call properly? 
public function __construct(
    Zend_Db_Adapter_Abstract $db, $config = array(), 
    $baselinedatabase = NULL, $databaseteardown = NULL 
){ 
    $this->_db = $db; 
    $this->_config = $config; 
    $this->_baselinedatabase = $baselinedatabase; 
    $this->_databaseteardown = $databaseteardown; 
} 

// Or is the wrong idea to be pursuing? 
+0

Utilisez-vous le plein Zend Framework w/le fichier de configuration application.ini? – allnightgrocery

+0

@Inkspeak J'ai le ZF sur mon serveur, donc je peux inclure tous les composants que je veux. J'ai PHPUnit installé séparément, donc je cherche à avoir un ensemble de tests qui nécessite le moins de code ZF possible. –

Répondre

1

Comme il semble que vous travaillez avec Zend Framework, je peux dire comment nous l'avons fait, mais je ne peux garantir que c'est la bonne solution. Mais cela fonctionne :)

Tous les tests se trouvent dans un dossier de tests distinct dont la suite de tests est définie comme XML (vous devez donc exécuter la commande phpunit --configuration TestSuite.xml). Au niveau de la racine, il y a cependant le fichier TestHelper que chaque test appelle et qui fait l'amorçage en appelant la classe bootstrap de l'application. Dans l'application bootstrap il y a une méthode et fait beaucoup de bootstrap mais sans envoi de requête. Donc ce que vous avez après l'exécution de cette méthode sera un environnement prêt à l'emploi (où vous avez tous vos Zend_Db, log, modules, etc. assemblés et prêts à partir) que les tests unitaires peuvent utiliser. L'appel à TestHelper a lieu au tout début de chaque classe de test unitaire. Voici un exemple rapide:

/** 
* Unit test for GeoAddressTable model 
* (skipped) 
*/ 

// Call GeoAddressTableTest::main() if this source file is executed directly. 
if (!defined('PHPUnit_MAIN_METHOD')) { 
     define('PHPUnit_MAIN_METHOD', 'GeoAddressTableTest::main'); 
} 

require_once 'PHPUnit/Framework.php'; 

require_once dirname(dirname(__FILE__)).'/GeoTestHelper.php'; 

Hope this helps