隔離單元測試中的時間依賴性
測試依賴DateTime.Now
的程式碼提出了獨特的挑戰。 直接針對系統時鐘進行測試會帶來不穩定性並使測試不太可靠。 以下是管理這種依賴性的兩種有效方法:
方法一:依賴注入
首選方法是抽象時間依賴性。 建立一個介面(例如 ITimeProvider
),定義取得目前時間的方法。 使用使用 SystemTimeProvider
的特定類別(例如 DateTime.Now
)來實作此介面。將此介面注入到需要當前時間的類別中。
在單元測試期間,您可以注入一個模擬 ITimeProvider
傳回預定的 DateTime
值。這使您可以完全控制測試中使用的時間,而不影響系統時鐘。
方法 2:環境環境(謹慎)
另一個選項涉及使用靜態上下文。使用儲存活動時間提供者的靜態 TimeProvider
屬性建立基底類別(例如 Current
)。 最初可以設定預設實作(例如 SystemTimeProvider
)。
為了進行測試,請覆寫靜態 Current
屬性以使用模擬提供者。 至關重要的是,請記住在每次測試後將Current
屬性重設為預設值,以防止後續測試中出現意外行為。這種方法需要仔細清理以避免測試幹擾。
總結
這兩種方法都可以有效隔離單元測試中的時間依賴性。 然而,與使用靜態環境情境相比,依賴注入通常因其更簡潔的設計和降低的意外副作用的風險而受到青睞。
以上是如何有效地對依賴「DateTime.Now」的程式碼進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!