In zeitkritischen Anwendungen kann das genaue Nachahmen der aktuellen Zeit für Unit-Tests von entscheidender Bedeutung sein. Allerdings wird time.Now() oft an mehreren Stellen aufgerufen, was es schwierig macht, die verstrichene Zeit genau zu verfolgen.
Die im Golang-Nuts-Thread vorgeschlagene Lösung, auf die Sie verwiesen haben bietet einen soliden Ansatz durch die Definition einer benutzerdefinierten Clock-Schnittstelle, die die Funktionalität des Zeitpakets umschließt:
type Clock interface { Now() time.Time After(d time.Duration) <-chan time.Time }
Sie können diese Schnittstelle mit einer konkreten Implementierung wie implementieren Dies:
type realClock struct{} func (realClock) Now() time.Time { return time.Now() } func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }
Erstellen Sie zum Testen eine Scheinimplementierung der Clock-Schnittstelle.
Auch wenn es verlockend erscheinen mag, die Systemzeit global zu ändern Zum Testen wird von diesem Ansatz dringend abgeraten. Es kann zu unvorhersehbaren Abhängigkeiten und Nebenwirkungen führen.
Erwägen Sie alternativ die Erstellung eines benutzerdefinierten Zeitpakets, das das Zeitpaket der Standardbibliothek umschließt. Dieses benutzerdefinierte Paket könnte eine Funktion bereitstellen, um während des Testens zu einer Scheinzeitimplementierung zu wechseln.
Um die Testbarkeit zu verbessern und Nebenwirkungen zu reduzieren, versuchen Sie, Ihren Code mit zu entwerfen zustandslose Komponenten so weit wie möglich. Indem Sie Ihren Code in separate, testbare Teile strukturieren, vereinfachen Sie den Unit-Testprozess und erleichtern die Sicherstellung des korrekten Verhaltens unter verschiedenen Zeitbedingungen.
Das obige ist der detaillierte Inhalt vonWie kann „time.Now()' für Golang-Unit-Tests effektiv ausgeblendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!