2009-05-17 19 views
0

je la structure du dossier suivant:PHP: Inclure uniquement les fichiers lors de l'exécution de phing?

/main 
    /loader.php 
    /build.xml 
    /components 
     /package1 
      /class1.php 
     /package2 
      /class2.php 
    /tests 
     /package1 
      /class1.test.php 
     /package2 
      /class2.test.php 

Quand je lance l'application web que je charge loader.php au premier et inclure d'autres composants en appelant Loader::load('package_name'). Ensuite, tous les fichiers nécessaires sont inclus. La bonne chose ici est que je n'ai pas besoin d'inclure loader.php dans les fichiers de classe parce que je peux compter sur une instance de travail de Loader.

Les classes de test d'unité simulent ce comportement en incluant explicitement toutes les classes nécessaires. Il n'y a donc aucun problème avec phing et PHPUnit.

Mais maintenant je veux générer un rapport de couverture avec phing et Xdebug. Le problème ici est que phing semble charger chaque fichier PHP pour créer la base de données de couverture. Malheureusement, il s'arrête parce qu'il ne peut pas trouver la classe Loader qui est utilisée dans les fichiers PHP.

Je pourrais facilement ajouter une instruction include à chaque fichier de classe, mais je me demande s'il est possible d'inclure des fichiers uniquement si l'analyse de la couverture de code inspecte le fichier?

Autre idée: Je pourrais aussi configurer l'analyse de la couverture d'une manière qui scanne les tests unitaires répertoire et trouve donc tout neccessary comprend. Ensuite, je devrais filtrer les classes qui correspondent à un modèle comme /Test$/i ou plus. Possible?

Répondre

1

J'ai cherché des âges pour quelque chose de similaire.

Finalement, j'ai fini avec les changements ci-dessous. Fondamentalement, vous dites à php cli de préfixer un fichier php qui contient votre logique de chargement.

Dans php.ini de mon cli je me suis fixé comme suit:

auto_prepend_file = autoload.php

Je me suis assuré que le dossier était sur mon chemin d'inclusion (/ usr/share/php mon cas) et mettre les lignes suivantes en elle (j'utilise Zend Framework qui est également sur mon chemin d'inclusion):

require_once "Zend/Loader/Autoloader.php"; $ autoloader = Zend_Loader_Autoloader :: getInstance(); $ autoloader-> registerNamespace ('Model_'); Maintenant, ce que vous pouvez faire est de définir votre fonction __autoload et de définir ce qui doit être chargé automatiquement, mais vous avez l'idée.

C'est un bidouille moche, mais ça a fait les choses pour moi.

Wkr Jeroen