Maison >développement back-end >Golang >Comment puis-je supprimer efficacement « time.Now() » à l'échelle mondiale pour des tests en Go ?
Stubbing Out time.Now() à l'échelle mondiale : exploration d'alternatives
Lors des tests de code qui dépend de fonctionnalités sensibles au temps, il est nécessaire de simuler la progression dans le temps. Bien que la mise en œuvre d'une interface de temps personnalisée puisse être une solution efficace, son utilisation peut devenir fastidieuse en raison de la nécessité de transmettre une variable pour suivre le temps réellement écoulé.
Package de temps personnalisé
Comme alternative, envisagez de créer un package de temps personnalisé qui entoure le package de temps de la bibliothèque standard. Cette approche vous permet de basculer de manière transparente entre l'implémentation en temps réel et une implémentation simulée à des fins de test. Par exemple :
// custom_time.go package custom_time import ( "time" "sync" ) var ( mockTime time.Time mockMutex sync.Mutex ) func SetMockTime(t time.Time) { mockMutex.Lock() mockTime = t mockMutex.Unlock() } func ResetMockTime() { mockMutex.Lock() mockTime = time.Time{} mockMutex.Unlock() } func Now() time.Time { mockMutex.Lock() defer mockMutex.Unlock() if mockTime != (time.Time{}) { return mockTime } return time.Now() }
Avantages du package personnalisé
Inconvénients du forfait personnalisé
Attention contre la modification de l'horloge système
Il est fortement déconseillé de modifier l'horloge système pendant les tests pour simuler la progression temporelle. Cela peut entraîner des conséquences imprévisibles pour d'autres composants du système qui dépendent de l'heure système précise.
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!