Property-Based Testing

Testing 🔴 Senior

Definition

Approche de test ou au lieu de cas specifiques, on definit des proprietes que le code doit toujours respecter, et le framework genere automatiquement des centaines d'entrees aleatoires.

Analogie

Comme dire a un crash-test 'la voiture doit proteger le passager peu importe l'angle de l'impact' plutot que tester 3 angles specifiques.

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

Ecrire des proprietes triviales (ex: la longueur du resultat > 0) qui ne testent rien de significatif.
#testing#senior#avance