如何全域存根time.Now() 進行測試
在編碼中,某些元素可能對時間敏感,需要操作用於測試目的的時間。一種方法是在測試中刪除 time.Now() 。然而,time.Now() 被頻繁調用,因此需要維護一個變數來監控實際經過的睡眠時間。
本文研究了全域消除 time.Now() 的替代方法,包括使用自訂介面以及建立修改後的「時間」套件的可能性。
自訂介面方法
自訂介面方法涉及實作類似以下的介面:
type Clock interface { Now() time.Time After(d time.Duration) <-chan time.Time }
此介面為Now() 和介面為Now() 和介面After() 方法提供佔位符,讓您定義測試和生產的具體實作。例如:
type realClock struct{} func (realClock) Now() time.Time { return time.Now() } func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }
潛在問題
雖然自訂介面方法很有效,但它也有一些警告:
替代方法
警告:
警告:
警告:
警告:警告:在執行測試時或一般情況下不建議更改系統時間,因為它可能會導致意外的依賴關係和偵錯問題。 結論存根time.Now() 全域測驗需要仔細考慮。雖然自訂介面方法是一個可行的選擇,但它可能會帶來額外的複雜性。或者,您可以建立修改後的「時間」套件或使用無狀態元件設計程式碼以簡化測試。以上是如何全域刪除 `time.Now()` 以便於測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!