在 Go 中測試常數
編寫 Go 程式時的一個常見挑戰是測試依賴常數值的程式碼。預設情況下,常數一旦定義就無法重新定義,導致測試時很難模擬不同的環境。
問題場景
考慮以下程式碼:
<code class="go">package main import ( "net/http" "net/http/httptest" ) const baseUrl = "http://google.com" func main() { // Logic that uses baseUrl }</code>
出於測試目的,您需要將 baseUrl 設定為測試伺服器 URL。但是,在測試檔案中重新定義const baseUrl 將導致錯誤:
<code class="go">// in main_test.go const baseUrl = "test_server_url" // Error: const baseUrl already defined</code>
解決方案
要克服此限制,您可以重構程式碼以刪除const並使用函數代替。例如:
<code class="go">func GetUrl() string { return "http://google.com" } func main() { // Logic that uses GetUrl() }</code>
在您的測試文件中,您可以重新定義函數以返回測試伺服器URL:
<code class="go">// in main_test.go func GetUrl() string { return "test_server_url" }</code>
另一種方法
另一種方法<code class="go">const baseUrl_ = "http://google.com" func MyFunc() string { // Call other function passing the const value return myFuncImpl(baseUrl_) } func myFuncImpl(baseUrl string) string { // Same implementation that was in your original MyFunc() function }</code>如果您希望保留const 值,您可以建立第二個函數,該函數將基本URL 作為參數,並將實際實作委託給原始函數:透過使用此方法,您可以透過測試myFuncImpl() 來測試MyFunc() 的實現,為每個測試案例傳遞不同的基本URL。此外,原始 MyFunc() 函數仍然安全,因為它始終將常數 baseUrl_ 傳遞給 myFuncImpl()。
以上是如何測試依賴常數值的 Go 程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!