property-based-testing
property-based-testing
Catalogue généré le 2026-05-11
En une phrase
Le property-based testing teste des propriétés universelles ("encoder puis décoder doit redonner la valeur d'origine") au lieu de cas spécifiques — la machine génère elle-même des milliers d'exemples pour traquer un contre-exemple.
Quand l'utiliser
- Tester une paire encode/decode, serialize/deserialize, toJSON/fromJSON (propriété "roundtrip").
- Tester un parseur (URL, config, protocole, format custom).
- Tester une fonction de normalisation (idempotence : appliquer 2 fois doit donner le même résultat).
- Tester une fonction pure (mathématique, tri, comparaison).
- Tester un smart contract Solidity/Vyper (invariants sur les balances, supply, ACL).
Comment l'invoquer
- Slash command :
/property-based-testing - Phrases déclencheurs (texte) : "property-based testing", "PBT", "Hypothesis", "QuickCheck", "invariant"
- Auto-invocation : Détection automatique sur patterns encode/decode, parsers, validators
Description détaillée
Le testing classique, c'est : "je liste 5 cas spécifiques (string vide, string longue, caractère bizarre…) et je vérifie chacun à la main". Le problème : tu testes ce à quoi tu penses, donc tu rates les cas auxquels tu ne penses pas. Le property-based testing renverse l'approche : tu décris une propriété que ton code doit respecter pour toute entrée valide, et la bibliothèque génère pour toi des centaines d'entrées aléatoires (et tordues : valeurs limites, Unicode bizarre, listes vides, négatifs…) pour vérifier la propriété.
Exemples concrets de propriétés :
- Roundtrip :
decode(encode(x)) == xpour toutx. - Idempotence :
normalize(normalize(x)) == normalize(x). - Commutativité :
add(a, b) == add(b, a). - Invariant : "Après transfert, la somme des balances reste constante" (smart contract).
Quand la lib trouve un contre-exemple qui casse ta propriété, elle fait du "shrinking" : elle simplifie automatiquement l'entrée pour te donner le contre-exemple minimal (par exemple [1, 0] au lieu de [42, 17, 99, 0, -5]). C'est ultra utile pour comprendre le bug. Outils populaires : Hypothesis (Python), QuickCheck (Haskell), fast-check (JS/TS), proptest (Rust), Echidna/Medusa (Solidity). Cette skill couvre les patterns pour tous ces langages.
Pour aller plus loin
Pour les exemples concrets, options de configuration et patterns avancés, voir le SKILL.md original.
Source
- Plugin :
trailofbits/property-based-testing - Nom interne :
property-based-testing - Fichier :
/home/thymon/.claude/plugins/cache/trailofbits/property-based-testing/1.1.0/skills/property-based-testing/SKILL.md
No comments to display
No comments to display