Property Based Testing : la vérité vraie !

bdxio

Benoit Prioux

lectra
versalis

Développement piloté par les tests

Inductif vs Deductif

Tests par propriétés

Exprimer des propriétés et laisser une suite de tests les vérifier pour un grand nombre d’entrées.

Propriété

Ensemble des entiers naturels
∀a ∈ ℕ a ≥ 0
Concaténation de string
(a + b).length = a.length + b.length

Comment trouver des propriétés ?

Règles métiers

Trouver les invariants dans votre domaine métier
business rules

Aller-Retour

Sérialiser + Déserialiser = idem
serialize

Certaines choses ne changent jamais

List.sort( ) = même taille, mêmes éléments
sort

Difficile à calculer, facile à vérifier

Trouver un chemin
itinerary

Outils

data
  • Intégration avec un runner de test
  • Besoin de générer des données aléatoires
  • Capacité à créer ses propres générateurs
  • Réduction des valeurs possibles en entrée

Librairies

haskell
  • Haskell : Quickcheck
  • Scala : ScalaCheck
  • Kotlin : KotlinTest
  • Java :

    • JUnit-Quickcheck pour Junit 4
    • Jqwik pour Junit 5

Démo : jqwik

molkky

Questions ?

  • 🖥 Slides
  • ☕️ Code
  • 🎦 Live Coding

Pour aller plus loin

🎦 Université Devoxx 2016 (Cyrille Martraire - Romeu MOURA)

/