2010-12-09 4 views
2

J'ai écrit quelques tests PHPUnit pour mon application PHP. Je travaille sur deux machines de développement qui synchronisent l'ensemble du système de fichiers de développement, et il y a un système de test automatique qui exécute les tests sur un svn checkout propre.Phpunit se comporte différemment sur différentes machines

Maintenant, quelque chose d'étrange se passe. L'une des machines de développement fonctionne Ubuntu linux 10.10, PHP 5.3.3, phpunit 3.4.6 que j'ai ensuite mis à jour vers 3.4.14. Quand j'exécute phpunit sur chaque test, tous les tests passent. Lorsque j'exécute phpunit sur mon fichier de configuration xml qui les exécute tous, en utilisant phpunit --configuration=phpunit.cfg, le dernier cas de test échoue et une erreur Class myClass not found est renvoyée. Cette classe se trouve dans un fichier chargé à l'aide de require_once. La mise à jour de phpunit n'a fait aucune différence.

modifier: J'ai le sentiment que la liste des fichiers PHP inclut l'aide require_once est remis à zéro pas sur mon linux, mais les classes sont effectivement perdues, qui est, il pense qu'il a déjà inclus myclass.php tout la classe à l'intérieur n'est pas chargée.

Maintenant, l'autre machine fonctionnant sous Mac OS X Snow Leopard 10.6.5, PHP 5.3.3 et PHPUnit 3.4.3. Si j'exécute les tests unitaires individuellement, aucune erreur ne se produit, comme dans la boîte Linux, mais lorsque j'exécute les tests avec la configuration xml, aucune erreur ne se produit non plus. Nous avons également un environnement de test automatique sous Linux 10.4 LTS, PHP 5.2.6 et phpunit 3.4.9. Aussi pas d'erreurs.

Tous les systèmes utilisent exactement les mêmes fichiers, donc il n'y a pas de différence dans le code source ou des tests. Le phpunit.xml est également le même.

Je me sens complètement dans l'obscurité ici. Comment puis-je savoir quel est le problème?

Tant la machine de développement de Linux et le macbook fonctionnent PHP 5.3.3. La machine de test automatique est runing 5.2.6

+0

Version PHPUnit? –

+0

Ah! Oublié de mentionner. Toute la branche 3.4. Mac: 3.4.3. (Fonctionne bien.) Autotest: 3.4.9. (Fonctionne aussi bien.) Linux: 3.4.6 et 3.4.14. (Les deux donnant le même problème) Je ne m'attends pas à ce que le problème soit absent en 3.4.3, apparaisse en 3.4.6, soit résolu en 3.4.9 et réapparaisse en 3.4.14. –

+0

S'il s'agissait d'un autre type d'erreur, je soupçonnerais qu'un test précédent interfère avec un test ultérieur. Cela peut se produire si un test modifie une variable globale ou statique dont dépend un test ultérieur. Est-il possible que cela se produise, et qu'il provoque l'exécution d'un autre chemin de code nécessitant myClass qui n'est pas exécuté si vous exécutez ce test de manière isolée? –

Répondre

0

Est-il possible que ce n'est pas PHPUnit qui agit, mais un problème de configuration de php locale causant des problèmes dans votre système sous test? Différez votre php.ini sur les 2 machines et vous trouverez probablement des différences.

1

Deux choses à surveiller:

  • Le chemin d'inclusion dans la configuration de PHP sur les deux machines
  • Qu'il n'y a pas une autre copie du fichier de classe assis dans votre homedir ou cwd de le script. Habituellement . sera dans le chemin d'accès pour PHP et les copies de fichiers non autorisés peuvent causer des problèmes comme celui-ci
Questions connexes