我需要在測試中的特定日期設置系統時鐘。這樣我就必須模擬在測試下發生的那種行爲。我發現這篇文章http://www.javapractices.com/topic/TopicAction.do?Id=234特定日期的假系統時鐘
但它並沒有給你太多提示如何設置假系統時鐘例如2013年2月5日。
請幫幫我。
我需要在測試中的特定日期設置系統時鐘。這樣我就必須模擬在測試下發生的那種行爲。我發現這篇文章http://www.javapractices.com/topic/TopicAction.do?Id=234特定日期的假系統時鐘
但它並沒有給你太多提示如何設置假系統時鐘例如2013年2月5日。
請幫幫我。
一般來說,操縱系統日期時間不是一個好習慣,我仍然記得每次我跑單元測試時,我的前景如何變得瘋狂以及過去所有類型的提醒如何彈出。
您可以創建一個靜態類,它根據環境返回日期時間,所以在測試環境中。它將允許設置日期時間,您可以在實際運行時訪問它,它將返回系統日期/時間。
但它並沒有給你太多提示如何設置假系統時鐘例如2013年2月5日。
它的確如此。我想你遵循了這些步驟,並用接口(例如TimeSource
)將所有呼叫替換爲系統時間。如果您需要模擬特定的日期,你可以使用你的測試類實現如下:
public final class TestTimeSrc implements TimeSource {
public long currentTimeMillis() {
Calendar calendar = Calendar.getInstance();
calendar.set(2013, 4, 2);
return calendar.getTime().getTime();
}
}
也許我錯過了一些東西,但這是否真的模擬了系統時鐘,而不僅僅是返回應用程序中的某些日期? – mjgirl 2013-03-04 12:08:25
@mjgirl就是這一點。創建一個在生產代碼中提供系統時間的中間類。然後,當您需要測試特定的日期值時,您可以創建假中間類,並且不要模擬系統時鐘。 – 2013-03-04 12:13:21
假設你需要操作時間,你的測試,並沒有真正改變系統時鐘......考慮使用Joda-Time,這有例如:
// always return the same time when querying current time
DateTimeUtils.setCurrentMillisFixed(millis);
// then test
assert new DateTime().getMillis() == millis;
// reset time
DateTimeUtils.setCurrentMillisSystem()
您必須權衡使用Joda-Time和自己實施解決方案之間的權衡!
什麼是挑戰 - 設置時間,或計算出Unix時間與人類可讀格式中的時間和日期等價嗎? – 2013-03-04 11:41:53
我想你應該檢查此更早的[後](http://stackoverflow.com/questions/6203857/how-can-i-set-the-system-time-in-java)。 – 2013-03-04 11:42:43
設置日期,以便測試類型「認爲」它在某個日期運行。 – mjgirl 2013-03-04 11:45:57