Heim > Backend-Entwicklung > Golang > Wie kann „time.Now()' für Golang-Unit-Tests effektiv ausgeblendet werden?

Wie kann „time.Now()' für Golang-Unit-Tests effektiv ausgeblendet werden?

Susan Sarandon
Freigeben: 2025-01-01 00:00:12
Original
590 Leute haben es durchsucht

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

Wie man time.Now() für Unit-Tests global ausschaltet

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.

Verwendung einer benutzerdefinierten Schnittstelle

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
}
Nach dem Login kopieren

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) }
Nach dem Login kopieren

Erstellen Sie zum Testen eine Scheinimplementierung der Clock-Schnittstelle.

Umgang mit Systemzeitänderungen

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.

Benutzerdefiniertes Zeitpaket

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.

Best Practices für zeitkritischen Code

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage