Property-Based Testing
Testing 🔴 SeniorDé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.