Écrire des tests unitaires pour du code legacy avant de le modifier
Créez des tests de caractérisation pour du code legacy sans tests : figez le comportement actuel, isolez base de données ou horloge et préparez un refactoring sûr, étape par étape. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 4 variables personnalisables et vous pouvez le copier gratuitement en un clic.
Intermédiaire · Code · En attente de relecture éditoriale
Prompt
Agis comme développeur senior habitué au code legacy et aux tests (tests de caractérisation et points de jonction, ou « seams »).
Contexte :
- Langage et framework de test : {{langage}}
- Dépendances difficiles utilisées par le code (base de données, date courante, réseau, fichiers, variables globales) : {{dependances}}
- Mon objectif une fois les tests en place : {{objectif}}
- Code :
```
{{code}}
```
Livrables :
1. Cartographie du comportement : entrées, sorties, effets de bord et branches du code, en liste courte.
2. Points de jonction : où et comment isoler chaque dépendance avec le changement minimal et sûr (injection par paramètre, encapsulation de l'appel, horloge factice) sans modifier le comportement.
3. Des tests de caractérisation qui figent le comportement ACTUEL, même s'il semble faux. Marque les cas suspects d'un commentaire « BUG POSSIBLE » au lieu de les corriger.
4. Cas limites : valeurs vides, nulles, extrêmes, erreurs des dépendances.
5. La couverture de branches obtenue, ce qui reste non couvert et pourquoi.
6. Un plan de refactoring en petites étapes, chacune vérifiable par les tests, orienté vers {{objectif}}.
Contraintes :
- Ne modifie pas la logique du code, ni dans les tests ni dans les points de jonction.
- N'invente pas le résultat attendu d'un cas s'il ne se déduit pas du code : indique [À COMPLÉTER : exécuter et coller la sortie réelle] et explique comment l'obtenir.
- Utilise des noms de tests descriptifs (étant donné / quand / alors).
- S'il manque du code dont dépend la fonction, demande-le-moi d'abord.
Format : sections numérotées et blocs de code prêts à exécuter.Comment l'utiliser
Collez la fonction ou la classe complète et citez les dépendances externes connues. Lancez les tests sur le code non modifié : ils doivent tous passer avant de commencer le refactoring.
Exemple d'utilisation
Langage : Python 3.11 avec pytest · Dépendances : datetime.now() et requêtes MySQL · Objectif : découper une fonction de 300 lignes qui calcule des commissions.
Exemple de résultat
En supposant que la fonction complète lit les commandes du client via PDO et utilise date() pour l’ancienneté…
2. Points de coupure (seams)
- Base de données : ajouter un paramètre optionnel
?PDO $pdo = nullqui reprend la connexion actuelle s’il vautnull. - Date : ajouter
?DateTimeImmutable $maintenant = nullet remplacerdate()par$maintenant->format(...).
Ces deux changements laissent tous les appels existants inchangés.
3. Tests de caractérisation
<?php
use PHPUnit\Framework\TestCase;
final class CalculerRemiseTest extends TestCase
{
private PDO $pdo;
protected function setUp(): void
{
$this->pdo = new PDO('sqlite::memory:');
// Schéma minimal calqué sur la vraie table : [À COMPLÉTER]
$this->pdo->exec('CREATE TABLE commandes (client_id INT, total REAL, cree_le TEXT)');
}
public function test_etant_donne_client_sans_commande_quand_total_100_alors_resultat_actuel(): void
{
$maintenant = new DateTimeImmutable('2025-03-15 10:00:00');
$resultat = calculerRemise(['id' => 42], 100.0, $this->pdo, $maintenant);
$this->assertSame(0.0, $resultat); // [À COMPLÉTER : exécuter et coller la sortie réelle]
}
public function test_etant_donne_total_negatif_alors_aucune_exception(): void
{
// BUG POSSIBLE : un total négatif n’est pas rejeté ; on fige le comportement actuel
$resultat = calculerRemise(['id' => 42], -50.0, $this->pdo, new DateTimeImmutable());
$this->assertIsFloat($resultat);
}
}
Exécutez d’abord chaque test, collez la valeur réelle dans l’assertion, et seulement ensuite commencez le refactoring…
Informations clés
- Catégorie
- Programmation et développement · Refactorisation
- Type de résultat
- Code
- Niveau
- Intermédiaire
- Conçu pour
- ChatGPT, Claude, Gemini et Microsoft Copilot
- Vérifié sur
- En attente de vérification éditoriale
- Variables
- Langage et framework de test, Dépendances difficiles, Objectif ensuite et Code
- Langue
- Français
- Prix
- Gratuit, sans inscription
- Mis à jour
- 07/11/2026
Questions fréquentes
Qu’est-ce qu’un test de caractérisation ?
Un test qui documente ce que fait le code aujourd’hui, et non ce qu’il devrait faire. C’est un filet de sécurité : si un refactoring change un résultat, le test vous prévient.
Et si le code contient un bug évident ?
Figez-le d’abord dans un test marqué « bug possible » et terminez le filet de sécurité. Corrigez-le ensuite dans un changement séparé pour ne pas mélanger refactoring et changement de comportement.
À quoi sert ce prompt ?
Créez des tests de caractérisation pour du code legacy sans tests : figez le comportement actuel, isolez base de données ou horloge et préparez un refactoring sûr, étape par étape.
Avec quels outils d'IA fonctionne-t-il ?
Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.
Comment personnaliser le prompt ?
Cliquez sur « Personnaliser » et remplissez les variables (Langage et framework de test, Dépendances difficiles, Objectif ensuite et Code). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.
Faut-il de l'expérience pour l'utiliser ?
Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.
Ce prompt est-il gratuit ?
Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.
Puis-je me fier au résultat de l'IA ?
Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.