Isolation des dépendances temporelles dans les tests unitaires
Tester le code dépendant de DateTime.Now
présente un défi unique. Tester directement l’horloge système introduit une instabilité et rend les tests moins fiables. Voici deux approches efficaces pour gérer cette dépendance :
Approche 1 : Injection de dépendances
La méthode préférée consiste à faire abstraction de la dépendance temporelle. Créez une interface (par exemple, ITimeProvider
) définissant une méthode pour obtenir l'heure actuelle. Implémentez cette interface avec une classe concrète (par exemple, SystemTimeProvider
) qui utilise DateTime.Now
. Injectez cette interface dans vos cours qui ont besoin de l'heure actuelle.
Lors des tests unitaires, vous pouvez injecter une simulation ITimeProvider
qui renvoie une valeur DateTime
prédéterminée. Cela vous donne un contrôle total sur le temps utilisé dans vos tests sans affecter l'horloge système.
Approche 2 : Contexte ambiant (avec prudence)
Une autre option consiste à utiliser un contexte statique. Créez une classe de base (par exemple, TimeProvider
) avec une propriété statique Current
contenant le fournisseur de temps actif. Une implémentation par défaut (par exemple, SystemTimeProvider
) peut être définie initialement.
Pour les tests, remplacez la propriété statique Current
pour utiliser un fournisseur fictif. Surtout, n'oubliez pas de réinitialiser la propriété Current
à sa valeur par défaut après chaque test pour éviter un comportement inattendu lors des tests suivants. Cette approche nécessite un nettoyage méticuleux pour éviter les interférences des tests.
Résumé
Les deux méthodes permettent une isolation efficace des dépendances temporelles dans vos tests unitaires. Cependant, l'injection de dépendances est généralement préférée en raison de sa conception plus propre et de son risque réduit d'effets secondaires involontaires par rapport à l'utilisation d'un contexte ambiant statique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!