Skip to main content

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)) == x pour tout x.
  • 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