Im Produktionscode ist es oft wünschenswert, Konstanten für stabile Werte wie Basis-URLs zu verwenden. Dies kann jedoch beim Testen zu Herausforderungen führen, da die Standardimplementierung von const in Go keine Neuzuweisung zulässt.
Bedenken Sie den folgenden Codeausschnitt, der versucht, die baseUrl-Konstante in neu zu definieren die Testdatei:
<code class="go">package main const baseUrl = "http://google.com" // in main_test.go ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ... } const baseUrl = ts.URL // throws error: const baseUrl already defined</code>
Dieser Code schlägt mit dem Fehler „const baseUrl bereits definiert“ fehl, da Go keine Neudefinition von Konstanten zulässt.
Zur Aktivierung Wenn Sie testfreundliche Konstanten verwenden, sollten Sie über eine Umgestaltung Ihres Codes nachdenken. Anstatt eine globale Konstante zu verwenden, erstellen Sie eine Funktion, die den konstanten Wert als Parameter verwendet:
<code class="go">const baseUrl_ = "http://google.com" func MyFunc(baseUrl string) { // Use baseUrl }</code>
In der Testdatei können Sie den Parameter „baseUrl“ neu definieren, ohne dass sich dies auf den Produktionscode auswirkt:
<code class="go">// in main_test.go ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ... } myFuncImpl(ts.URL) // Call the function with the test URL</code>
Dieser Ansatz ermöglicht es Ihnen, Ihren Code mit verschiedenen Werten der Konstante zu testen und gleichzeitig die ursprüngliche Implementierung beizubehalten. Die ursprüngliche Funktion MyFunc() verwendet weiterhin den produktionskonstanten Wert und gewährleistet so Stabilität für Nicht-Testszenarien.
Das obige ist der detaillierte Inhalt vonWie können Sie Konstanten in Go for Testing neu definieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!