Sur un projet en cours, les pouvoirs qui souhaitent avoir des tests unitaires intégrés à notre cycle de développement afin d'éviter la quantité constante de bogues qui semblent saisir notre code. Le problème est que le code des spaghetti est de 95% de pourcentage de procédure, que je n'ai jamais effectué de tests d'unités avec (toutes mes expériences avec des tests unitaires ont été avec OOP code)
Donc, ma question en un mot est de savoir qu'il serait sage de procéder à des tests unitaires avec notre code de code actuel ou de suggérer qu'il soit reporté jusqu'à ce que l'application ait été migratie vers une application appropriée OOP Framework?
PS: Alors que j'ai essayé de styler cette question comme langue agnostique, je pense que indiquer la demande en question utilise PHP et JavaScript contribuera à fournir des réponses plus spécifiques qui pourraient répondre à cette question depuis de l'expérience de cette occurrence. se produit le plus avec de telles applications.
Les tests de l'unité fonctionnent bien avec des objets, d'autant plus que cela fournit de nombreuses fonctionnalités fantaisistes, telles que des objets simulés, ce qui contribue à créer de meilleurs tests plus rapidement.
Cela étant dit, rien n'interdit de faire des tests unitaires sur une base de base de la procédure. Dans OOP, la plupart des tests d'unités sont des méthodes de test en leur faisant passer des paramètres et en attendant un résultat, soit une exception d'un type spécifique. Cela peut être fait aussi loin avec le code de procédure aussi; Juste que au lieu de tester des méthodes, vous testerez des fonctions.
Notez que vous devrez:
Isolez les fonctions que vous devez tester et ceux dont vous n'avez pas besoin. Dans OOP, c'est facile: les méthodes privées ne doivent pas être testées car les appelants ne seront jamais en mesure d'y accéder directement. Les chances sont, dans votre code de procédure, certaines fonctions sont comme celle-ci et n'avez pas besoin de tests.
Pensez à étendue globale. Le problème existe dans OOP aussi, mais si vous dites que vous devez tester le code des spaghettis, il est probable que les personnes qui ont écrit ce code ont de mauvaises habitudes, telles que l'utilisation trop de grandes habitudes, etc. faire certains des choses folles comme le changement $_GET
ou $_POST
tableaux Fonctions intérieures.
Traiter avec le code des fonctions extérieures. C'est un cas plus compliqué, mais toujours possible. Soit vous require_once
une page pour voir ce qui se passe et attraper la sortie via ob_start
/ob_get_clean
, ou vous faire une demande HTTP à partir de la suite de tests et analysez la réponse en analysant le HTML. Ce n'est pas vraiment un test d'interface utilisateur: ici, vous ne vous inquiétez pas si un bouton sur une page apparaît à gauche ou à droite ou si un lien est en lettres majuscules rouges ou en petits bleus. Ce que vous aimez, c'est trouver des éléments HTML via DOM et comparez leur contenu à l'attendu.
Testez les codes de réponse. require_once
Avec la mise en mémoire tampon de sortie est bonne, mais vous devez également tester comment l'application Web traite des erreurs. Par exemple, si le résultat attendu d'un test est 404 non trouvé, vous devez effectuer une demande HTTP afin de savoir quelle est la réponse.
suggère qu'il soit reporté jusqu'à ce que l'application ait été migrée vers un fichier approprié OOP Cadre
Obtenez des tests automatiques en place avant Migration vers une autre plate-forme, pas après. Ajoutez d'autres tests tout en faisant la migration, pas après. Si ces tests sont des "tests d'intégration" ou des tests d'unités, vous devez décider vous-même, mais vous pouvez généralement utiliser votre cadre de test Xunit préféré pour les deux types.
Le moyen le plus efficace de démarrer le test unitaire est d'identifier la classe d'erreurs qui se produisent le plus souvent ou constituent le coût le plus élevé. Ensuite, créez des tests qui ciblent ces erreurs.
La manière dont ces tests sont mis en œuvre diffèrent entre les paradigmes et les langues. Les plus grandes choses qui auront une incidence sur votre capacité à faire des tests unitaires sont la qualité du code; moins le paradigme utilisé. N'oubliez pas que le test de l'unité est de tester une "unité" de code dans l'isolement. Tout ce qui a une incidence sur votre capacité à isoler les "unités" du code rendra des tests plus difficiles.
Tout cela aura un impact plus élevé sur la difficulté de tests que le paradigme de la langue.
Chaque fois que vous avez une situation dans laquelle vous pouvez tester automatiquement des pièces de votre code, les tests unitaires peuvent être efficaces. La question ne peut donc pas que le code procédural soit efficacement testé une unité, la question est que ce code peut être testé unitaire. Cela dépendra de la quantité d'état qu'elle lit et beaucoup d'état qu'il définit. Idéalement, la réponse aux deux est nulle, mais si ce n'est pas le cas, vous pouvez toujours le tester.
Comme toujours, vous devez peser la confiance que le code est correct contre le coût de la confiance. N'oubliez pas que la partie du gain pour le test unitaire identifie explicitement les dépendances et, dans ce sens, il est encore plus efficace pour tester un seul code de procédure par rapport au OOP Code.