Maison > développement back-end > Golang > Comment supprimer efficacement « time.Now() » pour les tests unitaires Golang ?

Comment supprimer efficacement « time.Now() » pour les tests unitaires Golang ?

Susan Sarandon
Libérer: 2025-01-01 00:00:12
original
590 Les gens l'ont consulté

How to Effectively Stub Out `time.Now()` for Golang Unit Tests?

Comment bloquer globalement time.Now() pour les tests unitaires

Dans les applications sensibles au temps, se moquer avec précision de l'heure actuelle peut être crucial pour les tests unitaires. Cependant, time.Now() est souvent invoqué à plusieurs endroits, ce qui rend difficile le suivi précis du temps écoulé.

Utilisation d'une interface personnalisée

La solution suggérée dans le fil de discussion Golang-nuts auquel vous avez fait référence fournit une approche solide en définissant une interface Clock personnalisée qui englobe les fonctionnalités du package time :

type Clock interface {
  Now() time.Time
  After(d time.Duration) <-chan time.Time
}
Copier après la connexion

Vous pouvez implémenter cette interface avec une implémentation concrète comme ceci :

type realClock struct{}
func (realClock) Now() time.Time { return time.Now() }
func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }
Copier après la connexion

Pour les tests, créez une implémentation simulée de l'interface Clock.

Gestion des changements d'heure du système

Bien qu'il puisse sembler tentant de modifier l'heure du système globalement pour les tests, cette approche est fortement déconseillée. Cela peut introduire des dépendances et des effets secondaires imprévisibles.

Package horaire personnalisé

Comme alternative, envisagez de créer un package horaire personnalisé qui enveloppe le package horaire de la bibliothèque standard. Ce package personnalisé pourrait fournir une fonction permettant de passer à une implémentation de temps simulé pendant les tests.

Bonnes pratiques pour le code sensible au temps

Pour améliorer la testabilité et réduire les effets secondaires, efforcez-vous de concevoir votre code avec composants apatrides autant que possible. En structurant votre code en parties distinctes et testables, vous simplifiez le processus de tests unitaires et facilitez la garantie du comportement correct dans différentes conditions de temps.

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