2010-06-28 6 views
0

J'essaie certaines fonctionnalités prétendument sympa de PHPUnit, mais je ne peux pas générer un rapport de couverture de code bizarre. Ce que je reçois est:La génération du rapport de couverture de code PHPUnit échoue

[email protected] ~/projects/current/tests $ scripts/phpunit --configuration $PROJECTS/current/tests/conf/inc/tests.xml 
[...] 
Generating code coverage report, this may take a moment. 
[...] 
Fatal error: require_once(): Failed opening required 'lib/DataSource.php' (include_path=':::') in path/to/lib/WS/DataParser.php on line 10 

Cependant, dans cette classe très, un chemin d'inclusion spécifique est défini et le require_once fonctionne comme un charme lorsque l'application est lancée.

Est-il possible que PHPUnit ne puisse pas résoudre les chemins d'inclusion?

Merci d'avance et vive stackoverflöw!

Rolf 
+0

Lorsque vous 'lancez' votre application, est-ce via un navigateur ou la CLI? Si vous utilisez le navigateur, définissez-vous des chemins d'inclusion dans le fichier .htaccess ou éventuellement le fichier PHP.INI qui n'est pas utilisé par PHPUnit? – Narcissus

+0

salut, je lance généralement l'application via un navigateur, à l'exception des tests unitaires ... – Rolf

+0

btw, lancer une application est incorrecte? – Rolf

Répondre

0

Modifiez-vous votre include_path dans l'un de vos tests/code? Parce qu'il semble vraiment étrange (:: :)

+0

bien, j'ai une fonction __autoload juste pour les tests unitaires qui changent le include_path, mais la classe qui ne peut pas être analysée définit aussi un include path, donc je ne comprends pas ... – Rolf

+0

Votre include_path de (include_path = ':::') ne contient aucune information de chemin réelle, seulement des séparateurs de chemins. Cela signifie que le code peut seulement chercher dans le répertoire courant pour includes. – CaptainZee

1

Si vous utilisez la dernière version de PHPUNIT (3.5+), c'est peut-être parce que Sebastion a commencé à utiliser lui-même un autochargeur dans le programme.

Vous devez ajouter la ligne

spl_autoload_register('__autoload'); 

après votre fonction __autoload() est créé/inclus/requis

donc par exemple, le fichier qui a mon chargeur automatique est appelé fonctions. dans mon bootstrap je fais ce qui suit:

require_once(ROOT_PATH.'/lib/utils/functions.php'); 
spl_autoload_register('__autoload'); 
Questions connexes