全域消除time.Now():探索替代方案
測試依賴時間敏感功能的程式碼時,需要模擬時間進展。雖然實作自訂時間介面可能是一種有效的解決方案,但由於需要傳遞變數來追蹤實際經過的時間,其使用可能會變得很麻煩。
自訂時間包
作為替代方案,請考慮建立一個包含標準庫時間包的自訂時間包。這種方法可讓您在即時實現和模擬實現之間無縫切換以進行測試。例如:
// custom_time.go package custom_time import ( "time" "sync" ) var ( mockTime time.Time mockMutex sync.Mutex ) func SetMockTime(t time.Time) { mockMutex.Lock() mockTime = t mockMutex.Unlock() } func ResetMockTime() { mockMutex.Lock() mockTime = time.Time{} mockMutex.Unlock() } func Now() time.Time { mockMutex.Lock() defer mockMutex.Unlock() if mockTime != (time.Time{}) { return mockTime } return time.Now() }
自訂套件的優點
客製化的缺點包
系統警告時鐘修改
強烈建議不要在運行期間修改系統時鐘模擬時間進展的測試。這可能會為依賴準確系統時間的其他系統元件帶來不可預測的後果。
以上是如何在 Go 中有效地全域刪除 `time.Now()` 進行測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!