Heim >Backend-Entwicklung >Golang >Wie kann ich „time.Now()' zu Testzwecken global effektiv stummschalten?

Wie kann ich „time.Now()' zu Testzwecken global effektiv stummschalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 10:37:59424Durchsuche

How Can I Effectively Stub `time.Now()` Globally for Testing?

Globales Stubbing von time.Now()

Beim Testen wird es entscheidend, zeitabhängige Aspekte des Codes zu kontrollieren. Das globale Stubbing von time.Now() kann jedoch aufgrund der weit verbreiteten Verwendung über mehrere Codeabschnitte hinweg eine Herausforderung sein.

Vorgeschlagener Ansatz: Benutzerdefinierte Zeitschnittstelle

Die aktuelle Implementierung verwendet Eine benutzerdefinierte Schnittstelle ist eine effektive Lösung. Hier ist eine Zusammenfassung des Ansatzes:

  1. Definieren Sie eine Clock-Schnittstelle mit den Methoden Now() und After(d time.Duration).
  2. Erstellen Sie eine konkrete Implementierung (z. B. realClock). verhält sich wie das Standard-Zeitpaket.
  3. Erstellen Sie eine Scheinimplementierung zum Testen (z. B. mockClock).

Alternativen

Vom Ändern der Systemuhr während Tests wird dringend abgeraten, da dies zu unvorhergesehenen Abhängigkeiten führen kann.

Einschränkungen

Das Ausblenden von time.Now() hat weltweit seine eigenen Einschränkungen. Wenn der zu testende Code beispielsweise Bibliotheken von Drittanbietern verwendet, die auf Systemzeit basieren, ist es möglicherweise nicht möglich, deren Verhalten zu überschreiben.

Vorteile von Stateless Code

Das Entwerfen von Code mit möglichst wenig Zustandsbezogenheit vereinfacht das Testen und erleichtert die Parallelität. Durch die Aufteilung der Funktionalität in testbare, zustandslose Komponenten wird es einfacher, zeitkritische Aspekte während Tests zu kontrollieren.

Das obige ist der detaillierte Inhalt vonWie kann ich „time.Now()' zu Testzwecken global effektiv stummschalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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