Property-Based Testing

Testing 🔴 Senior

Définition

Approche de test ou au lieu de cas spécifiques, on définit des propriétés que le code doit toujours respecter, et le framework génère automatiquement des centaines d'entrées aléatoires.

Analogie

Comme dire a un crash-test 'la voiture doit protéger le passager peu importe l'angle de l'impact' plutôt que tester 3 angles spécifiques.

Exemple de code

// fast-check
import fc from 'fast-check';

test('sort is idempotent', () => {
  fc.assert(
    fc.property(fc.array(fc.integer()), (arr) => {
      const sorted = arr.sort();
      expect(sorted.sort()).toEqual(sorted);
    })
  );
});

Cas d'usage

Pour les fonctions pures et les algorithmes ou les edge cases sont difficiles a anticiper manuellement.

Anti-pattern

Écrire des propriétés triviales (ex: la longueur du résultat > 0) qui ne testent rien de significatif.
#testing#senior#avance

← → au clavier pour passer d'une fiche à l'autre