2016-03-03 42 views
2

我在我的代碼中有一個方法來驗證當天是否是業務。它會爲此檢查數據庫日曆。如何模擬當前日期?

方法是這樣的:

public boolean iBusinessDayToday() { 
     LocalDate today = LocalDate.now(); 
     //logic with today 
} 

我需要爲此編寫單元測試。

我想單元測試不依賴於星期幾。

你認爲需要使用powerMockito來模擬LocalDate.now()這個問題?

+0

您可以更改代碼嗎?在'iBusinessDayToday()'? – user140547

+1

由於'LocalDate.now()'的Javadoc警告:'使用這種方法將阻止使用另一個時鐘進行測試,因爲時鐘是硬編碼的。' – biziclop

回答

6

另一種方法是在時鐘傳遞給方法:

public boolean iBusinessDayToday() { 
    return iBusinessDayToday(Clock.systemDefaultZone()); 
} 

@VisibleForTesting 
boolean iBusinessDayToday(Clock clock) { 
     LocalDate today = LocalDate.now(clock); 
     //logic with today 
} 

現在可以測試第二個方法,並傳遞一個a fixed clock - 無需使用模擬框架。

+2

將'Clock'設置爲'a'可能會更好傳遞給它的構造函數。或者將方法更改爲'isBusinessDay(LocalDate day)'。問題是什麼班級負責定義「今日」?這是應該擁有「時鐘」的班級。 –