我正在寫一些代碼,對當前時間進行日期和時間計算。在喬達時代,這是通過一個(Java)構造函數來訪問的,因爲它是一個不可變的對象。我需要能夠模擬,以便new DateTime()
返回一個特定的常量瞬間,所以我可以做明智的測試斷言,但保留所有其他DateTime方法。在Grails中,有沒有一種使用喬達時間模擬當前時間的好方法?
這證明是令人討厭的。 Grails mockFor(DateTime, true)
不會讓我模擬一個Java構造函數,但是沒有明顯的或可讀的非構造函數在Joda中獲取時間。
唯一可用的選項似乎涉及像JMockit或EasyMock 3類嘲諷這樣的低級JVM技術,這是Grails的一個難題。有沒有簡單/直接的方式來實現這一目標?
很棒的回答。我曾經希望避免爲了讓這個測試成爲可能而設計不同的系統架構,但我學到了很多關於模擬構造函數的痛苦。 – 2011-05-26 13:06:50
謝謝。我嘗試避免直接的構造函數調用 - 它違反了「接口代碼」,創建的實例不能像測試中那樣外化,有時會導致「構造Blob」。所以它歸結爲一種依賴注入的形式。 – 2011-05-26 13:54:42