Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 94 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe contenant des méthodes :
 *  - d'intialisation des tests,
 *  - refactorisant le code des tests,
 *  - facilitant les tests.
 *
 * @category    php 5.3
 * @package             Tests/Scripts
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
 * @license             http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 * @license             http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 * @version             $Id$
 */
abstract class ScriptEflorePhpUnit extends PHPUnit_Framework_TestCase {

        public static function setUpBeforeClass() {
                error_reporting(E_ALL);

                self::chargerFramework();
        }

        private static function chargerFramework() {
                $cheminRacine = realpath(dirname(__FILE__).'/../').'/';
                $framework =  $cheminRacine.'framework.php';
                if (!file_exists($framework)) {
                        $e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
                        trigger_error($e, E_USER_ERROR);
                } else {
                        // Inclusion du Framework
                        require_once $framework;

                        // Ajout d'information concernant cette application
                        Framework::setCheminAppli($cheminRacine);// Obligatoire
                }
        }

        //+------------------------------------------------------------------------------------------------------+
        // Méthodes facilitant les tests

        /**
        * Récupère un bouchon de classe abstraite.
        * Comment l'utiliser :
        *       $classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2'));
        *   $foo = $classeAstraite->methodeConcretePublique();
        *
        * @param String $classeNom Le nom de la classe
        * @param Array $parametres Les paramètres à passer au constructeur.
        * @return Object Le bouchon de la classe abstraite
        */
        public function getClasseAbstraite($classeNom, Array $parametres) {
                $efloreScript = $this->getMockForAbstractClass($classeNom, $parametres);
                return $efloreScript;
        }

        /**
         * Récupère une méthode privée d'une classe pour tester/documenter.
         * Comment l'utiliser :
         *      MyClass->foo():
         *   $cls = new MyClass();
         *   $foo = self::getPrivateMethode($cls, 'foo');
         *   $foo->invoke($cls, $...);
         *
         * @param object $objet Une instance de votre classe
         * @param string $methode Le nom de la méthode private
         * @return ReflectionMethod La méthode demandée
         */
        public static function getPrivateMethode($objet, $nomMethode) {
                $classe = new ReflectionClass($objet);
                $methode = $classe->getMethod($nomMethode);
                $methode->setAccessible(true);
                return $methode;
        }

        /**
        * Récupère une méthode protégée d'une classe pour tester/documenter.
        * Comment l'utiliser :
        *       MyClass->foo():
        *   $cls = new MyClass();
        *   $foo = self::getProtectedMethode($cls, 'foo');
        *   $foo->invoke($cls, $...);
        * @param object $objet Une instance de votre classe
        * @param string $methode Le nom de la méthode protected
        * @return ReflectionMethod La méthode demandée
        */
        public static function getProtectedMethode($objet, $nomMethode) {
                return self::getPrivateMethode($objet, $nomMethode);
        }
}
?>