Points clés
- Utilisez des fixtures fixes pour des assertions stables et un tirage aléatoire avec graine pour l'exploration
- Enregistrez la graine aléatoire pour chaque échec généré
- Séparez les enregistrements normaux, limites et délibérément invalides
- Utilisez l'e-mail example.com et marquez les enregistrements comme synthétiques
Auteur et révision
Principes éditoriaux- Rédigé par
- Équipe éditoriale du générateur d'adresses aléatoires
- Révisé par
- Équipe de modélisation des données et d’examen de l’assurance qualité
- Dernière mise à jour substantielle
- Ajout de graines déterministes, de regroupement, de provenance et d'isolement de production non valides aux limites normales.
Les fixtures fixes et aléatoires répondent à des besoins différents
Les fixtures fixes conviennent aux instantanés, aux contrats et aux migrations. La génération aléatoire élargit les combinaisons, mais sans graine, elle crée des échecs que personne ne peut rejouer.
Conservez un petit ensemble de régression révisé et un générateur qui accepte les semences, le pays et le scénario. Transformez les échecs utiles en fixtures fixes.
| Fixation | Objectif | Exemple |
|---|---|---|
| Normale | Prouver le flux primaire | Forme de format et cohérence régionale |
| Limite | Exposer la longueur et l'encodage | Unicode, longue rue, zéro en tête |
| Invalide | Récupération à l'exercice | Ville et code postal ne correspondent pas |
| Défaut | Faire preuve de résilience | Délai de recherche et réessayez |
Reconnaissable sans casser le format
Utilisez des domaines réservés tels comme example.com, ajoutez dataPurpose et fixtureId et enregistrez fixtureId au lieu d'une adresse complète. Gardez la forme postale réaliste lorsque vous testez un analyseur.
Ne copiez jamais un client et remplacez uniquement le nom. D'autres champs peuvent toujours identifier une personne ou envoyer des notifications.
{
"fixtureId": "ca-boundary-003",
"dataPurpose": "synthetic-test",
"seed": 7319,
"countryCode": "CA",
"email": "qa-7319@example.com"
}Aléatoire ne veut pas dire incohérent
Définissez des invariants : le format du pays est accepté, les champs régionaux proviennent d'un seul tuple, les codes postaux restent du texte et les lignes facultatives restent vides plutôt que N/A. Les tests de propriétés peuvent vérifier cela sur de nombreuses graines.
Un fixture invalide peut casser un invariant, mais doit déclarer expectedError afin que personne ne le traite comme une donnée normale.
- Chaque graine est rejouable
- Les tuples régionaux normaux restent cohérents
- Les fixtures invalides enfreignent une règle nommée
- La sortie enregistre la version des données de référence
Prévenir les effets secondaires de la production
Testez les intégrations de courrier électronique, de SMS, d'impression, d'exécution et de paiement via des bacs à sable ou des blocs sortants. L'écriture de Test dans une adresse n'empêche pas un véritable appel logistique.
CI doit vérifier l'environnement et les types d'informations d'identification et rejeter les enregistrements de tests synthétiques entrant dans les files d'attente de production.
Transformez les échecs en atouts de régression
Conservez l’enregistrement d’échec minimal, la graine, la version des données et l’assertion. Dédupliquez périodiquement, mais ne régénérez pas les fixtures stables simplement pour leur donner un aspect neuf.
Attribuez à chaque fixture fixe un propriétaire, un scénario, un résultat attendu, une raison de création et une date de révision. Un gros fichier JSON qui n’explique pas le comportement qu’il protège devient rapidement une pile à laquelle personne n’a confiance et personne n’ose supprimer. Lors de l'examen, identifiez la couverture en double et les règles auxquelles le produit ne s'applique plus.
Ne prenez pas d’instantanés d’interface utilisateur à partir d’une sortie aléatoire sans restriction. Utilisez un enregistrement fixe explicite pour les instantanés et laissez les tests aléatoires affirmer les propriétés et les invariants. Cette division évite la perte d'instantanés inutiles chaque fois qu'une rue générée change tout en préservant une large couverture exploratoire.
Traitez une mise à niveau des données de référence comme un changement de dépendance. Exécutez l’ancien ensemble de semences avec le nouvel instantané, examinez les différences intentionnelles et conservez les deux versions suffisamment longtemps pour expliquer pourquoi un enregistrement précédemment reproductible a changé.
Suivez la couverture par scénario, et non par le nombre brut de lignes générées. Dix mille adresses ordinaires ne remplacent pas une installation délibérée pour une unité manquante, un code postal commençant par zéro, un nom de bâtiment trop long ou une région non prise en charge. Une matrice de couverture compacte permet aux évaluateurs de voir quelle règle chaque fixture exerce et où le générateur a encore des angles morts.
- Attribuer un propriétaire et un comportement protégé
- Examiner les cas en double et obsolètes
- Utilisez des fixtures fixes pour les instantanés et des fixtures aléatoires pour les propriétés
- Mises à niveau explicites des données de référence de version
Questions fréquentes
Les adresses de test doivent-elles être fixes ou aléatoires ?
Utilisez les deux : fixations fixes pour une régression stable et génération prédéfinie pour des combinaisons plus larges.
Pourquoi utiliser example.com pour les e-mails de test ?
Il est réservé à la documentation et aux tests, réduisant ainsi le risque de contacter un véritable tiers.
Les enregistrements synthétiques peuvent-ils fonctionner en production ?
Pas par défaut. Ils peuvent toujours déclencher de véritables effets secondaires en matière de courrier électronique, d’exécution, de paiement ou d’analyse.
