andrew0928 / columns.chicken-house.net

[安德魯的部落格] 網站原始檔案
http://columns.chicken-house.net/
MIT License
8 stars 2 forks source link

[架構師的修練] - 從 DateTime 的 Mock 技巧談 PoC 的應用 — 安德魯的部落格 #18

Open andrew0928 opened 2 years ago

andrew0928 commented 2 years ago

https://columns.chicken-house.net/2022/05/29/datetime-mock/

圖片來源: 動畫瘋, SPYxFAMILY #4這篇不打算寫那麼長,短篇就好,先聊聊一些比較直覺的實做技巧,同時也當作 PoC 這主題的起點。我想聊聊一件事: 就是在單元測試 / PoC (Proof Of Concept) 的過程中,怎麼處理 DateTime.Now 難以控制預期結果的問題?DateTime.Now 會傳回系統目前的時間,不過這很難預測 (你不知道何時程式才會啟動啊),這也讓依賴 DateTime.Now 開發的程式碼難以精準的測試。要解決的方法也不難,只要用這些關鍵字 (C#, DateTime, Mock) 到 Google 查一下,應該就可以查到一堆。不過,如果只是要在單元測試過程中掌控 DateTime.Now 的行為,其實這樣就夠了。我在思考系統設計過程中,很常用 PoC 的技巧,也常常會面對時間的問題啊… 隨便舉個例子: 系統在接受客戶的訂單時,會立即傳送確認訊息,同時會排定在每個月 15 日的 02:00, 更新月結報… blah blah …如果我要寫這樣的 code, 難道每次測試或是 demo 都得要等一天嗎? 或是我就真的得調整系統時間嗎? 如果這些場合還有面臨 UI 等等元素的介入 (不只是單元測試),我該怎麼做?因為有這些延伸的需求 (反正 DateTime 的處理也不複雜),我就決定捲起袖子自己弄了…