當我使用業務邏輯編寫代碼時,我的代碼通常取決於當前時間。例如,查看每個未完成訂單並檢查是否應發送發票的算法(取決於工作結束後的天數)。在這些情況下,創建發票不是由明確的用戶操作觸發的,而是由後臺作業觸發的。如何在Python中爲所有模塊更改日期/時間?
- 我可以測試發票創作本身容易
- 然而,它是很難在一個測試,創建訂單並檢查後臺作業:
現在,當談到測試這爲我一個問題在正確的時間識別正確的訂單。
到目前爲止,我發現了兩個解決方案:
- 在測試設置,計算工作日期相對於當前日期。下行:由於沒有明確的日期,代碼變得相當複雜。有時業務邏輯對於邊緣案例來說相當複雜,所以由於所有這些相對日期而變得很難調試。
- 我有我自己的日期/時間訪問器功能,我用我的代碼。在測試中,我只是設置當前日期,所有模塊都會獲得此日期。因此,我可以在2月模擬訂單創建,並檢查發票是否在4月份很容易創建。下行:第三方模塊不使用這種機制,因此很難集成+測試這些機制。
第二種方法畢竟對我來說比較成功。因此,我正在尋找一種方法來設置Python的日期時間+時間模塊返回的時間。設置日期通常就足夠了,我不需要設置當前的小時或秒(即使這樣很好)。
有沒有這樣的工具?是否有可以使用的(內部)Python API?
你測試過什麼版本的Python試試這個?我剛剛在MacOS 10.6上嘗試了2.6,並且datetime.datetime.now()很幸福地沒有意識到時間的變化。時間 – 2011-02-04 16:42:18
Malcolm,我剛剛在Windows上的Python 2.7.1上再次測試,它的工作原理與上面所示完全相同。也許它是依賴於平臺的,我想這並不令人驚訝。 – 2011-02-05 22:36:59
我使用Python 2.7.3在Ubuntu 12.04上測試了它,但它不起作用。如上所述,在用'mytime'修補'time.time'之後,調用'datetime.datetime.now'仍然返回當前時間。 – djsmith 2012-06-14 16:38:56