# 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`