10
votes

Configuration PHPUNIT (PHPUNIT.XML) - Chargement d'une bootstrap?

Situation

Nous utilisons phpunit dans notre projet et utilisez un phpunit.xml code> pour assurer des éléments tels que Backupglobals code> est désactivé. P> Pour assurer en outre que le chemin Inclure est défini et que l'autoloading est actif, nous en cascadons également nos bottes de test. C'est-à-dire que tous les tests et toutes les suites ALTESTS ont un requiss_once (__ dir__. '/../ bootstrap.php'); code> en haut, jusqu'au niveau du dossier de base, où Il lit évidemment requir_once (__ dir__. '/bootstrap.php'); code> et le fichier bootstrap réel réside. p>

essentiellement, nos tests sont autonomes. Vous pouvez appeler tout allTestestS.php code> dans n'importe quel dossier et n'importe quel * test.php code> par lui-même et ils seront exécutés avec la bonne configuration. P>

sauf non. ' Attendez un moment. EM>' P>

C'est vrai si nous forcions nos développeurs à utiliser phpunit --configuration = chemin / à / phpunit.xml code> ou ils sont dans le dossier avec le phpunit.xml code> (afin que PHPUnit le tire hors du répertoire de travail actuel lorsqu'il est exécuté). P>

occasionnellement, cela le rend incroyablement Difficile de déterminer pourquoi les tests sur une machine de développeur se brisent et pourquoi ils fonctionnent sur une autre. Il faut juste oublier que le bootstrap est pas em> la seule chose que nous devons avoir le même environnement de test. N'oubliez pas que puisque vous ne pouviez pas oublier le bootstrap si vous avez essayé, car il est dans les tests eux-mêmes, oubliez d'autres paramètres, en particulier généralement - optionnels comme celui-ci (si vous êtes dans le dossier avec le PHPUNIT.XML code>, il est automatiquement tiré), est facile. p>

En fait - c'est arrivé plusieurs fois. P>

Question H1>

Y a-t-il un manière que je puisse fournir quel phpunit.xml code> à utiliser dans le fichier de test étant exécuté, strong> tel que dans notre fichier bootstrap de manière commodément omniprésente, plutôt que de le fournir à PHPUnit à l'avance forte >, que ce soit par le commutateur de ligne de commande ou en étant dans son répertoire ? strud> p>

Un coup d'œil curseur au code suggère que la réponse est sans configuration et semble vraiment être chargée Avant que les fichiers de test soient même tirés: p>

[sample of part of our phpunit.xml]
<phpunit
    backupGlobals="false" 
    backupStaticAttributes="false" 
    convertErrorsToExceptions="true"  
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    syntaxCheck="false"
    processIsolation="false"
    colors="true">


0 commentaires

3 Réponses :


10
votes

Réponse directe: Non, vous ne pouvez pas faire ça.

Histoire plus longue - Ce type de problème est mieux résolu en changeant les habitudes des développeurs.

Voici nous le faisons:

  • Tous les développeurs exécutent toujours les tests du répertoire racine des tests, qui possède la semelle phpunit.xml avec toutes les configurations nécessaires - y compris Bootstrap, qui définit un téléchargeur automatique de classe.
  • Nous n'avons pas de test de test en tant que tels, les tests sont regroupés à l'aide de répertoires, pas d'all autres.php n'importe où, car il n'est pas nécessaire. PHPUnit peut prendre un nom de répertoire et exécuter tous les tests à l'intérieur.
  • Il est toujours possible d'exécuter n'importe quel test en donnant un chemin en lui donnant un chemin ou en test de test (en donnant le chemin du répertoire). Il doit juste être fait à partir du répertoire racine des tests tout le temps ou il ne fonctionnera pas.

    le faire comme ça signifie abandonner la liberté de démarrer PHPUnit de n'importe quel répertoire, mais d'être honnête - je n'ai pas l'impression que c'est une perte du tout.

    Les gains sont beaucoup plus gros: la quantité de code de ménage est réduite, les développeurs ne peuvent rien oublier et les résultats sont donc cohérents.


3 commentaires

Vous voyez, notre problème est que nous avons cette première politique - mais les Devs leur sont dit une fois et il n'y a rien de ne rien rappeler de le faire. Il fonctionne 99 sur une centaine de cas, lorsque vous souhaitez exécuter toute la suite Test de toute façon, car vous devez vous assurer que vos modifications ne se cassent pas, et que vous le faites à partir du répertoire racine - puis est oublié quand vous Voulez-vous faire un test rapide d'une branche de répertoire.


En cela, je pense que votre point 2 est très perspicace; Peut-être supprimer AllTestS.php dans les sous-répertoires «forcerait» le processus de pensée un peu mieux, servez de rappel du phpunit.xml . Je vais donner cela plus de pensée et rebondirez-le de mes collègues, peut-être que c'est la meilleure solution.


C'est un choix entre changer les habitudes et créer un enfer de maintenance (avec de nombreux fichiers de configuration à synchroniser). Bonne chance :)



4
votes

Ma solution consiste à ajouter une fonction Bash xxx

puis ajoutez ceci à tous les fichiers de dev .bstrucc et ils peuvent basculer pour l'utiliser.

Nous aimons les appeler de vim Je devais donc ajouter ceci à .vimrc : Set shellcmdflag = -ic

alors vous ajoutez nmap; t :! PHPU% Pour exécuter le fichier de test dans lequel vous êtes actuellement.


0 commentaires

0
votes

Vous pouvez mettre à jour le script de démarrage (fichier BAT Windows ou shell sur * Nix) et avoir la logique à configurer à l'emplacement du phpunit.xml. Si c'est dans le répertoire actuel, utilisez-le, sinon pointez le principal.

Je suis également d'accord avec ANTI, que tous les tests doivent toujours être exécutés, comme vous souhaitez vous assurer que les modifications, même dans une branche de répertoire, n'affectent pas les autres CODE. Par conséquent, continuez toujours du haut de l'arbre. Cela nécessite également que le test exécute rapidement, mais je n'ai pas vraiment eu de problème avec PHPUnit à ce sujet.

Maintenance du phpunit.xml Dans chaque répertoire serait un cauchemar de maintenance, sauf si elle était liée symboliquement à partir d'autres chemins pour vous assurer qu'il n'y avait qu'un seul fichier.


0 commentaires