2010-08-28 12 views
5

我想測試一些類方法,它們包含依賴於當前運行時間的邏輯。我想在JUnit設置中將線程/ jvm/system時間設置爲特定的未來日期並運行我的測試。我也希望這是暫時的。有沒有人做過這個?是否有可能在Java中更改線程或jvm實例的當前時間?

我想的是類似於TimeZone.setDefault(時區)的東西

+0

線程沒有當前時間,JVM也沒有。 – EJP 2010-08-29 03:01:13

回答

2

我不相信有這樣使用java.util.Date的方式。

如果你正在使用joda時間,那麼你可以。見this

+0

Joda時間對我來說似乎是最簡單的解決方案 – Kirby 2012-06-07 15:07:38

2

我一直在爲此而苦苦掙扎。到目前爲止,我發現的最好的解決方案是有一個TimeHelper類來管理時間:作爲Date工廠,保存DateFormatter等,以便這些事情不會分佈在代碼庫中。使用Easymock或其他模擬框架,可以直接測試與時間相關的東西。

0

你正在走錯這條路。您的班級方法應接受代表時間的long值 - 他們不應接受TimeZone。如果您重新將您的方法與他們從TimeZone那裏得到的時間相分離的事實分離開來,那麼您可以輕鬆測試您的方法,而無需執行您現在正在嘗試執行的操作;您只需使用預先定義的long值代表某個特定時間,而不是用默認值是您希望測試的某個預定值的TimeZone對象調用您的方法。

您需要從提供該時間值的源中分離出接收'time'參數的方法。通過這樣做,您可以在使用TimeZone或當前系統時間的情況下運行代碼,並且可以在使用您希望測試的預定義時間值的同時測試代碼。

繼續嘗試重構代碼並查看是否可以實現所需的功能 - 您應該可以。回來再回答任何問題,我們很樂意提供幫助!

祝你好運。

4

您可以使用AspectJ並在java.lang.System.currentTimeMillis(),java.util.Date.new()java.util.Calendar.getInstance()周圍包裝方法,根據您的需要調整時間。

+0

+1我需要嘗試一些時間。 – 2010-08-28 21:02:24

相關問題