我在我的代碼中實現了一個TimerTask。它會定期對應用程序邏輯進行一些修改。現在我想用JUnit測試這個TimerTask的影響。假設TimerTask計劃每2秒運行一次,但我應該運行測試用例而不使用Thread.sleep。JUnit測試沒有使用Thread.sleep的預定影響邏輯
public class LogService {
public LogService() {
configuration = ConfigurationUtil.getConfgiration();
Timer timer = new Timer(true);
timer.scheduleAtFixedRate(new ScheduledAgent(), 0, configuration.getWaitTime());
}
private List<LoggingDetails> loggingDetails;
public List<LoggingDetails> getLoggers() {
return loggingDetails;
}
class ScheduledAgent extends TimerTask {
@Override
public void run() {
// if time has taken more than wait time, then clear loggingDetails
}
}
}
一個單元測試場景是我在waitTime時間段內得到loggingDetails。這是可以實現的。另一種情況是,我應該測試並確認在等待時間後,列表被清除併爲空。
我認爲我們需要更多關於你的需求的細節,但你可能想看看[JMockit](http://jmockit.org),我認爲它可以讓你模擬一些像Thread.sleep這樣的系統方法,或者返回當前時間的方法。 – ajb