在生產程式碼中,通常需要使用常數來表示穩定值,例如基本 URL。然而,這可能會在測試時帶來挑戰,因為 Go 中 const 的預設實作不允許重新分配。
考慮以下程式碼片段,它嘗試重新定義測試檔案:
<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>
此程式碼將失敗,並顯示const baseUrl 已定義錯誤,因為Go不允許重新定義常數。
啟用測試友善的常數,請考慮重構您的程式碼。不要使用全域常數,而是建立一個將常數值作為參數的函數:
<code class="go">const baseUrl_ = "http://google.com" func MyFunc(baseUrl string) { // Use baseUrl }</code>
在測試檔案中,您可以重新定義baseUrl 參數,而不影響生產程式碼:
<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>
這種方法可讓您使用不同的常數值測試程式碼,同時保留原始實作。原始函數 MyFunc() 仍使用生產常數值,以確保非測試場景的穩定性。
以上是如何在 Go 中重新定義常數進行測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!