你可以提取now
的計算服務
public interface DateSource {
Date getNow();
}
在生產這種可以得到當前的日期
public class DefaultDateSource implements DateSource {
public Date getNow() {
return new Date();
}
}
在測試中,你可以有一個可配置的DateSource
public class TestDateSource implements DateSource {
private Date now;
public Date getNow() {
if (now == null) throw new RuntimeException("TestDateSource not setup");
return now;
}
public void setNow(Date now) {
this.now = now;
}
}
使用您選擇的IOC容器,您可以配置和@Inject
DateSource
納入您的服務。爲了測試,您可以注入TestDateSource
並根據您的需要調整其值。
實例:
public class AdvertisingService {
private final DateSource dateSource;
public AdvertisingService(DateSource dateSource) {
this.dateSource = dateSource;
}
public boolean isActive(Advert advert) {
Date now = dateSource.getNow();
return advert.startDate.before(now) && advert.endDate.after(now);
}
}
我在這裏看到兩個測試。 1創建廣告並2「激活」它。使用自動化測試,您應該隨時使用正確的配置或以前的任務來測試這兩件事情。 –
難道你不能在當天創建一個廣告,重新啓動服務器並測試它是否變爲活動狀態?如果該測試成功,則該功能適用於任何日期。 –