6
votes

Comment gérez-vous les fichiers de test de l'unité dans des projets? les ajoutes-tu en git?

Comment gérez-vous vos fichiers PHPUnit dans vos projets?
L'ajoutez-vous à votre Git ou les ignorez-vous?
Utilisez-vous @assert étiquette dans vos codes phpdocs


4 commentaires

github.com/doctrine/doctrine2


PS: curieux - Si vous ignorez et ne commettez pas de tests - comment les autres membres de l'équipe (ou même vous) sont censés travailler avec eux?


+ Zerkms merci et bon point


Related: Devrais-je utiliser PHPUnit dans un environnement de mise en scène / production ?


3 Réponses :


9
votes

SETUP

Je n'utilise pas PHP actuellement, mais je travaille avec Python Test de l'unité et Documentation Sphinx en git. Nous ajoutons nos tests à GIT et avons même certaines exigences sur le test qui passe pour pousser à la télécommande Devel maître branches ( maître plus difficile que Devel ). Cela assure un peu de qualité de code (la couverture de test doit également être évaluée, mais elle n'est pas encore mise en œuvre :)).

Nous avons le Tester des fichiers dans un répertoire séparé en regard du répertoire source de niveau supérieur dans le répertoires où ils appartiennent, préfixés avec test _ , de sorte que le cadre de test de l'unité les trouve automatiquement.

Pour la documentation Son similaire, nous venons de mettre les dossiers Documents Sphinx dans leur propre sous-répertoire (Docs), qui est dans notre cas une sous-module GIT indépendante, qui pourrait être modifiée à l'avenir.

Justification
  • Nous voulons pouvoir suivre les changements dans les tests, car ils devraient être rares. Les modifications fréquentes indiquent le code immature.

  • Les autres membres de l'équipe ont besoin d'un accès aux tests, sinon ils sont inutiles. S'ils changent de code dans certains endroits, ils doivent pouvoir vérifier cela ne cassent rien.

  • La documentation appartient au code. En cas de python, le code contient directement la documentation. Nous devons donc la conserver à la fois ensemble, car les documents sont générés à partir du code.

  • Avoir les tests et les documents du référentiel permet de tester automatisé et de la construction doc sur le serveur distant, ce qui nous donne une documentation mise à jour instantanée et des commentaires de test. De plus, la mise en œuvre de restrictions de "qualité de code" basées sur les résultats des tests fonctionne de cette façon (c'est en fait plus un rappel pour les personnes à exécuter des tests, car la qualité du code ne peut pas être vérifiée avec des tests sans regarder la couverture des tests). Les réfs sont rejetés par le serveur GIT si des tests ne passent pas.

    Nous n'exigeons par exemple que sur maître , tous les tests doivent passer ou être ignorés (malheureusement, nous avons besoin d'ignorer, car certains tests nécessitent OpenGL, qui n'est pas disponible sur l'inditoire), tandis que sur < Code> Devel C'est bon si les tests sont simplement "se comporter comme prévu" (c.-à-d. Passer, sauter ou défaillance attendue, aucun succès inattendu, erreur ou échec).


3 commentaires

Merci, c'était très utile


@Jonas, votre lien Github.com/pyuniverse/pyuniverse/tree/devel/engine / Ressources est cassé


@Pacerier Merci beaucoup, j'ai mis à jour le lien et la réponse pour refléter la situation actuelle.



2
votes

Oui, pour les garder en git. Autres conventions que j'ai prises en regardant des projets, y compris PHPUnit même. (Un examen de l'exemple de doctrine2 montre qu'il semble suivre la même convention.)

Je garde des tests dans un Tests . Dans la mesure où j'ai nommé de manière significative les sous-répertoires, suivant généralement la structure principale du répertoire de projet. J'ai un sous-répertoire fonctionnel pour tests qui testent plusieurs composants ensemble (le cas échéant).

i Créez phpunit.xml.dist Dites-lui où trouver les tests (et en disant immédiatement à tous ceux qui recherchent le code source que nous utilisons phpunit et en consultant le fichier XML qu'ils peuvent comprendre la convention aussi).

Je n'utilise pas @assert ou le générateur de squelette. Cela ressemble à une fonctionnalité de jouet; Vous faites une frappe en un seul endroit (votre fichier source) pour enregistrer une frappe à un autre endroit (votre fichier de test de l'unité). Mais ensuite, vous développerez des tests dans les fichiers de test de l'unité (voir mon prochain paragraphe), peut-être même supprimer certaines des affirmations originales, et maintenant les entrées @assert dans le fichier source d'origine sont sorties. de date et trompeur à quiconque en regardant juste ce code.

Vous avez également perdu beaucoup de puissance que vous avez fini par avoir besoin de tests réels de classes du monde réel (exemple de banque simpliste, je vous regarde). No SETUP () / DELARN () . Aucune variables d'instance. Aucun support pour toutes les autres fonctions d'affirmation intégrées, encore moins sur mesure. No @depends et @DataProvider .

Une autre raison contre @assert , et pour la maintenance d'un arborescence distinct : j'aime différentes personnes pour écrire les tests et le code réel, dans la mesure du possible. Lorsque les tests échouent, il pointe parfois un malentendu dans les spécifications du projet d'origine, par votre codeur ou votre testeur. Lorsque le code et les tests vivent rapprochés, il est tentant de les changer en même temps. Surtout tard le vendredi après-midi lorsque vous avez une date.


2 commentaires

Que voulez-vous dire par " @assert et générateur squelette"?


@Pacerier Il est / était un module semblable à un sorcier pour générer le squelette des tests. On dirait qu'il a été déplacé du noyau sur un module optionnel à partir de PHPUnit 3.7: Stackoverflow.com/a/12641670/841830 et actuellement trouvé ici: Github.com/sebastianbergmann/phpunit-skeleton-Generator



1
votes

Nous stockons nos tests avec les fichiers de code, les développeurs voient ainsi les tests à exécuter et s'assurer qu'ils modifient les tests selon les besoins. Nous ajoutons simplement une extension de .test au fichier. De cette façon, nous pouvons simplement inclure le fichier d'origine automatiquement dans chaque fichier de test, qui peut ensuite être créé avec un modèle. Lorsque nous publions le code, le processus de construction supprime les fichiers .TEST de tous les répertoires.

/ application / src /
Foo.php
Foo.php.test

/ application / src / classe /
Foo_bar.class
Foo_bar.class.test

nécessitent_once (substrateur (__ file__, 0, -5)); // Strip '.test' extension


1 commentaires

L'ajout de l'extension .TEST le rend effectif pratique et pratique.