在Go 中重新定義常數以進行測試
在Go 程式設計領域,常數提供了一種儲存固定值的不可變方法。雖然這種剛性確保了穩定性,但在測試過程中,當人們需要靈活地改變這些值時,它會帶來挑戰。例如,考慮這樣一個場景:您有一個存取遠端 API 的 HTTP 用戶端。出於測試目的,您更願意使用模擬伺服器而不是進行實際的 API 呼叫。
最簡單的方法是將 baseUrl 宣告為全域變數並在測試期間修改其值。然而,這有潛在的缺點,因為它引入了影響生產程式碼的運行時變更的風險。為了保持程式碼完整性,您可能想要將 baseUrl 定義為生產常數,但保留更改它以進行測試的能力。
解決方案:使用參數重建
解決方案在於稍微重建程式碼。不要在函數中使用常數,而是引入一個接受所需的 baseUrl 值的參數。這允許原始函數保留其 API,同時為測試提供靈活性。
<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 { // use baseUrl // Same implementation that was in your original MyFunc() function }</code>
這種方法可確保您的程式庫的 API 保持不變。但是,它現在允許您透過使用不同的 baseUrl 值來測試 myFuncImpl() 來測試原始 MyFunc() 的功能。 MyFunc() 本身不受影響,因為它總是將常數 baseUrl_ 傳遞給 myFuncImpl()。
匯出或未匯出的測試函數
是否匯出或取消匯出的決定myFuncImpl() 函數取決於測試程式碼的位置。如果它位於同一個套件中,則無論其匯出狀態如何,都可以直接呼叫 myFuncImpl() 而不會出現問題。
以上是如何修改Go中的常數以進行有效的測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!