Maison > développement back-end > Golang > Comment puis-je bloquer efficacement « time.Now() » à l'échelle mondiale pour les tests ?

Comment puis-je bloquer efficacement « time.Now() » à l'échelle mondiale pour les tests ?

Mary-Kate Olsen
Libérer: 2024-12-22 10:37:59
original
430 Les gens l'ont consulté

How Can I Effectively Stub `time.Now()` Globally for Testing?

Stubbing global de time.Now()

Dans les tests, il devient crucial de contrôler les aspects du code dépendants du temps. Cependant, supprimer time.Now() à l'échelle mondiale peut être difficile en raison de son utilisation généralisée dans plusieurs sections de code.

Approche suggérée : interface de temps personnalisée

L'implémentation actuelle utilisant une interface personnalisée est une solution efficace. Voici un résumé de l'approche :

  1. Définissez une interface Clock avec les méthodes Now() et After(d time.Duration).
  2. Créez une implémentation concrète (par exemple, realClock) qui se comporte comme le package d'heure standard.
  3. Créez une implémentation fictive pour les tests (par exemple, mockClock).

Alternatives

La modification de l'horloge système pendant les tests est fortement déconseillée car cela peut entraîner des dépendances imprévues.

Limites

Réduire le temps.Now() a globalement ses limites. Par exemple, si le code testé utilise des bibliothèques tierces qui s'appuient sur l'heure système, il se peut qu'il ne soit pas possible de remplacer leur comportement.

Avantages du code sans état

Concevoir du code avec le moins d'état possible simplifie les tests et facilite la concurrence. En séparant les fonctionnalités en composants testables et sans état, il devient plus facile de contrôler les aspects sensibles au temps pendant les tests.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal