2
我想要一個幫助器類來獲取當前日期。由於未來的測試問題(可能需要返回與系統時間不同的時間),因此我想避免在代碼中使用new Date()
,並且我無法使用JodaTime來防止測試出現問題。java.util.Date的Mockable幫助器類
我想這樣的幫手:
public interface DateHelper {
/**
* Returns the current date.
*/
Date now();
}
但我怎麼能提供這種接口的嘲笑給客戶呢? 我能想到的唯一的解決辦法是這樣的:
public ClientOfDateHelper {
private DateHelper dateHelper;
// no-arg constructor that instantiates a standard implementation of DateHelper
public ClientOfDateHelper() {
this.dateHelper = new DefaultDateHelper();
}
// constructor that can be used to pass mock to the client
public ClientOfDateHelper(DateHelper suppliedDateHelper) {
this.dateHelper = suppliedDateHelper;
}
public void foo() {
Date today = dateHelper.now();
// do some work that requires today's date
}
}
是否有需要使用DateHelper更少的代碼更優雅的解決方案,但它允許使用嘲笑?
依賴注入或依賴查詢(即客戶端從某個中央服務/類請求日期助手)如何? – Thomas