Heim >Backend-Entwicklung >Golang >Wie kann ich „time.Now()' global zum Testen in Go effektiv ausschalten?
Time.Now() weltweit ausschalten: Alternativen erkunden
Beim Testen von Code, der von zeitkritischen Funktionalitäten abhängt, besteht die Notwendigkeit, dies zu tun Zeitverlauf simulieren. Während die Implementierung einer benutzerdefinierten Zeitschnittstelle eine effektive Lösung sein kann, kann ihre Verwendung umständlich werden, da eine Variable weitergegeben werden muss, um die tatsächlich verstrichene Zeit zu verfolgen.
Benutzerdefiniertes Zeitpaket
Erwägen Sie alternativ die Erstellung eines benutzerdefinierten Zeitpakets, das das Zeitpaket der Standardbibliothek umschließt. Mit diesem Ansatz können Sie nahtlos zwischen der Echtzeitimplementierung und einer Scheinimplementierung zum Testen wechseln. Zum Beispiel:
// 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() }
Vorteile von benutzerdefinierten Paketen
Nachteile von Custom Paket
Vorsicht vor dem System Uhrmodifikation
Es wird dringend davon abgeraten, die Systemuhr während Tests zu modifizieren, um den Zeitverlauf zu simulieren. Dies kann zu unvorhersehbaren Folgen für andere Systemkomponenten führen, die auf die genaue Systemzeit angewiesen sind.
Das obige ist der detaillierte Inhalt vonWie kann ich „time.Now()' global zum Testen in Go effektiv ausschalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!