首頁 >後端開發 >Golang >如何有效地全域存根「time.Now()」進行測試?

如何有效地全域存根「time.Now()」進行測試?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 10:37:59514瀏覽

How Can I Effectively Stub `time.Now()` Globally for Testing?

時間的全域存根。 Now()

在測試中,控製程式碼的時間相關方面變得至關重要。然而,由於在多個程式碼段中廣泛使用,全域刪除 time.Now() 可能具有挑戰性。

建議方法:自訂時間介面

目前的實作使用自訂介面是一個有效的解決方案。以下是此方法的摘要:

  1. 使用方法 Now() 和 After(d time.Duration) 定義一個 Clock 介面。
  2. 建立一個特定的實作(例如 realClock)行為類似於標準時間包。
  3. 建立一個用於測試的模擬實現(例如,

替代方案

強烈建議不要在測試期間更改系統時鐘,因為它可能會導致不可預見的依賴關係。 >限制

存根time.Now() 在全球範圍內都有其限制。 例如,如果被測程式碼使用依賴系統時間的第三方函式庫,則可能無法覆寫其行為。 🎜>

無狀態碼的好處

設計具有盡可能少的有狀態的程式碼可以簡化測試並促進並發性。

以上是如何有效地全域存根「time.Now()」進行測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn