私のコードに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を取得することです。これは実装可能です。もう1つのシナリオは、待ち時間の後にリストがクリーンでヌルであることをテストして確認することです。
私はあなたのニーズが何であるかについてもっと詳しく知っておくべきだと思いますが、[JMockit](http://jmockit.org)を見てみるといいでしょう。これは 'Thread.sleep'や現在の時刻を返すメソッド – ajb