Hypothesis – Tests génératifs en Python

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction

Les tests classiques vérifient qu'une fonction fonctionne avec des valeurs données. Mais que faire si vous ne savez pas à l'avance quelles données d'entrée provoqueront une erreur ? Hypothesis – les tests génératifs résolvent ce problème automatiquement.

Hypothesis est une puissante bibliothèque de property-based testing pour Python qui transforme radicalement votre approche du test. Au lieu de créer manuellement des données de test, elle génère automatiquement des milliers de valeurs d'entrée différentes, cherchant à trouver des cas limites, erronés ou non standard. Plutôt que d'écrire de nombreux tests avec des valeurs spécifiques, vous décrivez les propriétés et les invariants de votre fonction, et Hypothesis tente de les violer.

Qu'est-ce que Hypothesis ?

Hypothesis est un outil de test génératif basé sur le concept de property-based testing. Cette bibliothèque a été créée pour résoudre un problème fondamental des tests traditionnels : l'impossibilité de prévoir toutes les données d'entrée possibles.

Principes de fonctionnement

La bibliothèque fonctionne sur le principe de la "recherche de contre-exemple". Lorsque vous définissez une propriété d'une fonction (par exemple, que le résultat de l'addition de deux nombres est toujours supérieur à chacun des termes), Hypothesis génère une multitude de données d'entrée différentes et vérifie si cette propriété est vraie pour chaque ensemble.

Avantages par rapport aux tests traditionnels

  • Couverture automatique des cas limites : Hypothesis trouve lui-même les combinaisons de données rares et complexes
  • Minimisation des erreurs : En cas d'échec, le test est automatiquement simplifié en un exemple minimal
  • Haute performance : La génération de milliers de cas de test est rapide
  • Reproductibilité : Les erreurs trouvées peuvent être facilement reproduites

Installation et premiers pas

Installation de la bibliothèque

pip install hypothesis

Pour des fonctionnalités supplémentaires, vous pouvez installer avec des extensions :

pip install hypothesis[numpy,pandas,django]

Exemple d'utilisation de base

from hypothesis import given
import hypothesis.strategies as st

@given(st.integers(), st.integers())
def test_addition_commutative(a, b):
    assert a + b == b + a

@given(st.integers(), st.integers())
def test_addition_associative(a, b, c):
    assert (a + b) + c == a + (b + c)

Lancement des tests

Les tests peuvent être lancés via pytest, unittest ou directement :

pytest test_file.py
python -m unittest test_file.py
python test_file.py

Bases de la génération de données

Le décorateur @given

Le décorateur @given() est l'élément central d'Hypothesis. Il indique quelles stratégies de génération utiliser pour créer les données de test.

@given(st.integers())
def test_absolute_value(x):
    assert abs(x) >= 0

@given(st.text(), st.integers(min_value=0))
def test_string_multiplication(s, n):
    result = s * n
    assert len(result) == len(s) * n

Le module hypothesis.strategies

Toutes les stratégies de génération de données se trouvent dans le module hypothesis.strategies, généralement importé sous le nom st. Ce module offre un ensemble riche de stratégies prédéfinies pour différents types de données.

Stratégies de génération de données

Stratégies de base

Hypothesis fournit un vaste ensemble de stratégies intégrées pour générer différents types de données :

# Types numériques
st.integers()  # Nombres entiers
st.floats()    # Nombres à virgule flottante
st.decimals()  # Nombres décimaux

# Données textuelles
st.text()      # Chaînes Unicode
st.binary()    # Chaînes d'octets
st.characters() # Caractères individuels

# Log                    

Recommendations