Comment tester les contrôleurs avec CodeIgniter?

J'ai une application web PHP construit avec CodeIgniter framework MVC. Je souhaite tester les différentes classes de contrôleur. Je suis en utilisant Toast pour les tests unitaires. Mon contrôleurs ont pas d'état, tout est soit enregistré dans la session ou transmis à l'affichage. La création d'une simulation de session de l'objet et de tester si qui fonctionne correctement est simple (il suffit de créer un objet fantaisie et à y injecter $controller->session = $simulacre).

Ce que je ne sais pas, c'est comment de travailler avec des points de vue. Dans CodeIgniter, les vues sont chargés de:

$this->load->view($view_name, $vars, $return);

Car je ne veux pas modifier code de CI, j'ai pensé que je pouvais créer une maquette Chargeur et remplacer l'original. Et c'est là que réside le problème, je ne peux pas trouver un moyen de dériver une nouvelle classe de CI_Loader.

Si je ne comprend pas le system/libraries/Loader.php fichier, la classe CI_Loader est pas défini et je ne peut pas hériter d'elle:

class Loader_mock extends CI_Loader

Si je dois inclure le fichier (à l'aide de require_once), j'obtiens l'erreur:

Cannot redeclare class CI_Loader

Ressemble à CI code lui-même ne pas utiliser require_once quelle qu'en soit la raison.

Ce que quelqu'un ici a de l'expérience avec les tests unitaires CodeIgniter applications alimentées?

Edit: j'ai essayé d'injecter un véritable objet loader au moment de l'exécution dans un simulacre de classe, et de rediriger tous les appels et les variables avec __appel, __set, __get, __isset et __ _ _ unset. Mais, il ne semble pas fonctionner (je n'ai pas des erreurs si seulement, pas de sortie, c'est à dire vierge de la page de pain grillé). Voici le code:

class Loader_mock 
{
    public $real_loader;
    public $varijable = array();

    public function Loader_mock($real)
    {
        $this->real_loader = $real;
    }

    public function __call($name, $arguments) 
    {
        return $this->real_loader->$name($arguments);
    }

    public function __set($name, $value)
    {
        return $this->real_loader->$name = $value;
    }

    public function __isset($name)
    {
        return isset($this->real_loader->$name);
    }

    public function __unset($name)
    {
        unset($this->loader->$name);
    }

    public function __get($name)
    {
        return $this->real_loader->$name;
    }

    public function view($view, $vars = array(), $return = FALSE)
    {
        $varijable = $vars;
    }
}

source d'informationauteur Milan Babuškov