Tests et débogage
Flux de travail de test et de débogage avec Verdent
Verdent for VS Code vous aide à écrire des tests complets et à déboguer des problèmes grâce à des cycles multipasses de génération-test-réparation, une analyse des erreurs et des améliorations automatisées de la couverture de tests. Générez des tests unitaires, d'intégration et de bout en bout adaptés au framework de test et au style de votre projet.
Ce que vous allez apprendre
- Générer des tests unitaires couvrant les cas limites et le comportement attendu
- Travailler avec tous les principaux frameworks de test (Jest, Pytest, JUnit, etc.)
- Créer des tests d'intégration vérifiant des flux de travail multi-composants
- Améliorer la couverture de tests en identifiant et en testant les chemins de code non couverts
- Déboguer des problèmes grâce à l'analyse des messages d'erreur et au traçage d'exécution
- Diagnostiquer des bugs à partir de traces de pile, de journaux d'erreurs et de comportements inattendus
Prérequis
Avant de tester et déboguer avec Verdent :
- Visual Studio Code avec l'extension Verdent installée
- Une base de code ou un espace de travail de projet ouvert dans VS Code
- Une offre d'abonnement Verdent active avec des crédits disponibles
- Framework de test configuré dans votre projet (facultatif pour la génération de tests)
Rédiger des tests unitaires
Verdent génère des tests unitaires adaptés au framework de test et au style de votre projet. Il analyse les tests existants pour comprendre vos habitudes, puis génère des tests avec une configuration, des assertions et un mocking appropriés.
Exemple :
Write unit tests for the calculateDiscount functionVerdent va :
- Examiner l'implémentation de la fonction
calculateDiscount - Identifier les paramètres d'entrée et les valeurs de retour
- Analyser les tests existants pour respecter vos conventions (structure des tests, style d'assertion, conventions de nommage)
- Générer des tests couvrant :
- Cas nominal : entrées valides avec les sorties attendues
- Cas limites : valeurs limites, zéro, nombres négatifs, valeurs maximales
- Entrées invalides : null, undefined, types incorrects
- Comportement attendu : validation de la logique métier
Structure des tests générés :
Verdent crée des tests suivant les modèles de votre projet :
- Organisation de la suite de tests : blocs describe, classes de test ou structure de module
- Configuration et nettoyage : hooks before/after correspondant à vos tests existants
- Assertions : utilisant la bibliothèque d'assertions de votre projet (expect, assert, should, etc.)
- Mocking : correspondant à vos modèles de mocking (jest.mock, sinon, unittest.mock)
- Conventions de nommage : noms de tests suivant votre style établi
Cycles multipasses de génération-test-réparation :
Pour des tests complets, Verdent utilise des cycles multipasses :
- Générer : créer une suite de tests initiale
- Exécuter : lancer les tests pour vérifier qu'ils fonctionnent
- Réparer : corriger les tests en échec ou améliorer la couverture
- Itérer : répéter jusqu'à ce que les tests passent et que la couverture soit suffisante
Cela garantit que les tests ne sont pas seulement écrits mais fonctionnent réellement avec votre base de code.
Verdent analyse vos tests existants pour respecter vos conventions. Plus vos modèles de tests existants sont cohérents, mieux les tests générés par Verdent s'aligneront sur le style de votre projet.
Frameworks de test pris en charge
Verdent prend en charge tous les principaux frameworks de test dans différents langages de programmation et piles technologiques sans configuration supplémentaire.
Frameworks de test unitaire :
test('sum returns correct result', () => {
expect(sum(2, 3)).toBe(5);
});const assert = require('assert');
describe('sum', () => {
it('returns correct result', () => {
assert.strictEqual(sum(2, 3), 5);
});
});import { describe, it, expect } from 'vitest';
it('sum returns correct result', () => {
expect(sum(2, 3)).toBe(5);
});describe('sum', () => {
it('returns correct result', () => {
expect(sum(2, 3)).toEqual(5);
});
});Tests spécifiques au framework :
- React Testing Library - Tests de composants React centrés sur l'utilisateur
- Vue Test Utils - Bibliothèque de test officielle de Vue.js
Tests de bout en bout :
- Cypress - Tests de bout en bout et de composants
- Playwright - Tests de bout en bout multi-navigateurs
- Puppeteer - Tests avec Chrome headless
- Pytest - Le framework de test Python le plus populaire
- unittest - Framework de test Python intégré
- nose2 - Étend unittest avec des plugins
- doctest - Tests intégrés dans les docstrings
Verdent génère des tests avec des fixtures, une paramétrisation et des modèles d'assertion appropriés, correspondant à votre style de test Python.
- JUnit - Framework de test Java standard (JUnit 4, JUnit 5)
- TestNG - Framework de test avec des fonctionnalités avancées
- Mockito - Framework de mocking pour Java
- AssertJ - Bibliothèque d'assertions fluide
Verdent crée des tests avec des annotations, des méthodes de cycle de vie et des assertions suivant les conventions de test Java.
- RSpec (Ruby) - Framework de développement piloté par le comportement
- PHPUnit (PHP) - Framework de test unitaire pour PHP
- Go testing (Go) - Package de test intégré à Go
- xUnit (C#/.NET) - Framework de test pour .NET
- Catch2 (C++) - Framework de test C++ moderne
Verdent s'adapte aux idiomes de test de votre langage et génère des tests correspondant aux conventions de votre projet.
Verdent reconnaît votre framework de test à partir de la configuration de votre projet et des tests existants, et génère automatiquement des tests adaptés à votre configuration.
Générer des tests d'intégration
Verdent génère des tests d'intégration vérifiant comment plusieurs composants, services ou modules fonctionnent ensemble. Il crée des tests simulant des flux de travail réels, y compris les interactions API, les opérations de base de données, les flux d'authentification et les parcours utilisateur en plusieurs étapes.
Exemple :
Write integration tests for the user registration flowVerdent génère des tests vérifiant le flux complet :
- Soumission du formulaire : l'utilisateur soumet le formulaire d'inscription avec des données valides
- Validation : le backend valide le format de l'e-mail, la robustesse du mot de passe, l'exhaustivité des données
- Insertion en base de données : l'enregistrement utilisateur est créé dans la base de données
- Envoi de l'e-mail : un e-mail de confirmation est envoyé (simulé ou réel)
- Connexion réussie : le nouvel utilisateur peut se connecter immédiatement avec ses identifiants
Structure des tests d'intégration :
Verdent crée des tests d'intégration avec :
- Configuration des tests : alimentation de la base de données, initialisation des services, création de données de test
- Simulation du flux de travail : opérations en plusieurs étapes en séquence
- Vérification de l'état : contrôle de l'état de la base de données, réponses API, effets secondaires
- Simulation des services externes : services d'e-mail, APIs de paiement, intégrations tierces
- Nettoyage des tests : suppression des données de test, restauration de la base de données, arrêt des services
Exemples de scénarios de test :
Write integration tests for the checkout and payment processVerdent teste :
- L'ajout d'articles au panier
- L'application de codes de réduction
- Le calcul des totaux avec taxes et frais de livraison
- Le traitement du paiement (avec une passerelle de paiement simulée)
- La création de l'enregistrement de commande en base de données
- L'envoi de l'e-mail de confirmation
- La mise à jour de l'inventaire
Isolation des tests :
Verdent garantit que les tests d'intégration sont correctement isolés :
- Chaque test commence avec un état de base de données propre
- Les appels aux services externes sont simulés pour éviter les effets secondaires
- Les tests peuvent s'exécuter dans n'importe quel ordre sans dépendances
- Le nettoyage a lieu même si les tests échouent
Les tests d'intégration bénéficient d'environnements de test isolés, Verdent peut aider à configurer des fixtures de base de données et à simuler des services externes.
Les tests d'intégration vérifient que les composants fonctionnent correctement ensemble. Ils sont plus complexes que les tests unitaires mais offrent une plus grande confiance dans le bon fonctionnement des flux de travail réels.
Améliorer la couverture de tests
Verdent analyse votre base de code pour identifier les fonctions, branches et cas limites non testés, puis génère des tests pour améliorer la couverture. Il examine votre suite de tests existante et identifie les lacunes où des chemins de code ne sont pas exercés.
Exemple :
Analyze test coverage and write tests for uncovered code paths in the payment moduleVerdent va :
- Analyser les tests existants : examiner ce qui est actuellement testé
- Identifier les lacunes de couverture : trouver les fonctions spécifiques, les branches conditionnelles, les chemins de gestion d'erreurs et les cas limites non testés
- Générer les tests manquants : créer des tests ciblant le code non couvert
- Vérifier l'amélioration de la couverture : exécuter les tests pour confirmer l'augmentation de la couverture
Ce que Verdent identifie :
- Fonctions non testées : fonctions sans aucune couverture de test
- Branches conditionnelles : instructions if/else où une branche n'est pas testée
- Chemins de gestion d'erreurs : blocs try/catch ou callbacks d'erreur sans tests d'échec
- Cas limites : valeurs limites, gestion de null/undefined, coercition de type
- Points d'intégration : appels API, opérations de base de données, interactions avec des services externes
Exemple d'amélioration de la couverture :
Improve test coverage for the UserService classVerdent identifie :
getUserByIda des tests pour les identifiants valides mais pas pour les identifiants invalidesupdateUser: tests manquants pour les échecs de validationdeleteUser: tests manquants pour les contrôles d'autorisation- Les chemins de gestion d'erreurs dans
createUserne sont pas testés
Puis génère des tests ciblant spécifiquement ces lacunes, faisant passer la couverture de 65 % à 95 %.
Métriques de couverture :
Verdent vous aide à atteindre des pourcentages de couverture plus élevés et à détecter des bugs potentiels dans du code jusqu'alors non testé :
- Couverture de lignes : pourcentage de lignes de code exécutées par les tests
- Couverture de branches : pourcentage de branches conditionnelles testées
- Couverture de fonctions : pourcentage de fonctions avec au moins un test
- Couverture d'instructions : pourcentage d'instructions exécutées
Déboguer avec Verdent
Verdent aide au débogage en analysant les messages d'erreur, en traçant le flux d'exécution, en identifiant les causes profondes et en suggérant des corrections. Collez des journaux d'erreurs, décrivez un comportement inattendu, ou demandez à Verdent d'investiguer des problèmes spécifiques.
Décrivez ce qui ne va pas et ce que vous attendiez :
This function returns undefined instead of the user object. Debug it.Verdent va :
- Lire l'implémentation de la fonction
- Tracer le flux d'exécution
- Identifier où le chemin de code dérape (instruction return manquante, condition incorrecte, problème async/await)
- Proposer une correction avec une explication
- Suggérer des cas de test pour éviter une régression
Exemple :
The login form redirects to the home page even when credentials are invalidVerdent va :
- Examiner la logique de soumission du formulaire de connexion
- Tracer le flux d'authentification
- Identifier le bug (la redirection se produit avant la fin de la validation asynchrone)
- Proposer une correction (attendre la validation avant de rediriger)
Demandez une analyse de performance :
The product search is slow when the database has 10,000+ productsVerdent va :
- Analyser l'implémentation de la requête de recherche
- Identifier l'inefficacité (requêtes N+1, index de base de données manquant, algorithme inefficace)
- Suggérer une optimisation (ajouter un index de base de données, regrouper les requêtes, mettre en cache les résultats)
Le débogage de performance aide à identifier les goulots d'étranglement dans les algorithmes, les requêtes de base de données ou les réponses API qui ralentissent votre application.
Comprendre comment le code s'exécute :
Why does this API endpoint return a 500 error when the email parameter is missing?Verdent va :
- Tracer le traitement de la requête depuis le point d'entrée jusqu'à la validation et la base de données
- Identifier où l'erreur se produit (accès à une propriété d'un élément undefined)
- Expliquer pourquoi l'erreur se produit (contrôle null manquant avant l'accès à la propriété)
- Suggérer une correction défensive (valider les paramètres avant de les utiliser)
Le traçage du flux d'exécution vous aide à comprendre le chemin emprunté par votre code et où il dévie du comportement attendu.
Collez les messages d'erreur ou les traces de pile directement dans le chat. Verdent analyse l'erreur, localise le code problématique et explique ce qui s'est mal passé avec les chemins de fichiers et numéros de ligne précis.
Diagnostiquer à partir des messages d'erreur et des journaux
Collez les messages d'erreur, les traces de pile ou les fichiers journaux directement dans le chat. Verdent analyse l'erreur, identifie le fichier source et le numéro de ligne, explique la cause et suggère une correction.
Collez les messages d'erreur et les traces de pile :
TypeError: Cannot read property 'name' of undefined
at UserProfile.render (UserProfile.jsx:45)
at processComponent (react-dom.js:2103)Collez ceci dans Verdent :
I'm getting this error: [paste stack trace]Verdent va :
- Identifier le type d'erreur (TypeError due à un accès null/undefined)
- Localiser la ligne exacte (
UserProfile.jsx:45) - Lire le code à cet emplacement
- Expliquer pourquoi cela se produit (l'objet user est undefined avant le chargement des données)
- Proposer des corrections :
- Ajouter un contrôle null :
if (!user) return <Loading /> - Utiliser le chaînage optionnel :
user?.name - S'assurer que les données sont chargées avant le rendu du composant
- Ajouter un contrôle null :
Collez des fichiers journaux ou une sortie console pour analyse :
Analyze these logs and tell me why the API requests are failing:
[paste 50 lines of log output]Verdent va :
- Scanner les journaux à la recherche de modèles d'erreurs
- Identifier les échecs d'authentification, les délais d'attente réseau ou les erreurs de base de données
- Tracer la séquence d'événements ayant conduit à l'échec
- Suggérer des corrections basées sur le modèle d'erreur
L'analyse des journaux aide à identifier des modèles à travers plusieurs échecs et à comprendre la séquence d'événements menant aux erreurs.
Pour les problèmes complexes, Verdent utilise un débogage en plusieurs étapes :
- Analyser les journaux d'erreurs pour identifier le point d'échec
- Lire le code concerné pour comprendre l'implémentation
- Tracer le flux d'exécution pour trouver où les choses dérapent
- Suggérer des corrections avec des exemples de code
- Générer des tests pour éviter une régression
Exemple :
The shopping cart total is sometimes incorrect. Here are the error logs: [paste logs]Verdent va :
- Analyser les journaux et identifier quand le bug se produit (lors de l'application des codes de réduction)
- Lire la logique de calcul de réduction
- Identifier le bug (la réduction est calculée avant la taxe, et non après)
- Proposer une correction (réordonner les étapes du calcul)
- Suggérer des cas de test (panier avec réduction, panier avec taxe, panier avec les deux)
Bonnes pratiques
Générer les tests tôt
Écrivez des tests au fur et à mesure du développement des fonctionnalités, pas après leur achèvement. Verdent peut générer des tests immédiatement après la création de nouvelles fonctions ou de nouveaux composants.
Utiliser les tests existants comme guides de style
Verdent s'aligne sur les modèles de test de votre projet. Maintenez une structure de test cohérente afin que Verdent génère des tests conformes à vos conventions.
Demander explicitement des tests pour les cas limites
Demandez à Verdent de tester les conditions limites, les scénarios d'erreur et les entrées inhabituelles : « Écris des tests incluant les cas limites pour les entrées invalides et les valeurs limites. »
Coller les messages d'erreur directement
Ne paraphrasez pas les erreurs. Collez la trace de pile complète pour un diagnostic précis et une résolution plus rapide.
Décrire le comportement attendu par rapport au comportement réel
Lors du débogage, indiquez clairement ce que vous attendiez et ce qui s'est réellement produit. Ce contexte aide Verdent à identifier la cause profonde.
Utiliser les tests multipasses pour les fonctionnalités complexes
Pour les fonctionnalités critiques, demandez une génération de tests complète avec des cycles multipasses : « Génère des tests complets pour le module de paiement et vérifie qu'ils passent tous. »
Tester après un refactoring
Après avoir refactorisé le code, demandez des tests pour vérifier que les fonctionnalités sont préservées : « Génère des tests pour vérifier que le module d'authentification refactorisé fonctionne correctement. »
Combiner débogage et génération de tests
Après avoir corrigé un bug, demandez un test pour éviter une régression : « Écris un test qui garantit que ce bug ne se reproduira pas. »