如何测试Java调度器(ScheduledExecutorService)?
这是我尝试java scheduler在一年后测试打印消息的代码如何测试Java调度器(ScheduledExecutorService)?,java,unit-testing,Java,Unit Testing,这是我尝试java scheduler在一年后测试打印消息的代码 import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class testMain { public static void main(String[] args) { Schedule
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class testMain {
public static void main(String[] args) {
ScheduledExecutorService sheduler = Executors.newScheduledThreadPool(6);
// once in a Year
long nextYear = TimeUnit.DAYS.toSeconds(365);
sheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("You successfully finished another year woohooo");
}
}, nextYear, TimeUnit.DAYS.toSeconds(365), TimeUnit.SECONDS);
}
}
我需要在不等待一年的情况下测试这个。你能帮我锻炼吗?没有必要测试内置方法。假设它们有效。如果您想测试代码的逻辑,请配置等待时间,并使用少量时间进行测试(例如10毫秒)。否则,您也可以通过将这个等待逻辑包装到一个专用的方法来模拟它,并且在测试时,您可以给它一个模拟的方法,该方法只是直接触发 比如说
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class testMain {
public static void main(String[] args) {
ScheduledExecutorService sheduler = Executors.newScheduledThreadPool(6);
// once in a Year
long nextYear = TimeUnit.DAYS.toSeconds(365);
sheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("You successfully finished another year woohooo");
}
}, nextYear, TimeUnit.SECONDS.toSeconds(2), TimeUnit.SECONDS);
}
}
你认为你的应用程序可以运行365天而不会死掉。可能,但不太可能。没有办法,你需要在电脑前等待365天。:)或者只是暂时使用
TimeUnit.SECONDS.toSeconds(10)
检查其行为,然后将其恢复到年。没有必要测试内置方法。假设它们有效。如果要测试代码逻辑,请配置等待时间,并使用少量时间进行测试(例如10毫秒)。否则,您也可以通过将此等待逻辑包装到一个专用方法中来模拟它,并在测试时为其提供一个直接触发的模拟方法。一种方法是使用依赖项注入从外部注入ScheduledExecutorService
,而不是自己创建它。这样,您就可以通过一个假密码,请参见。或者,很明显,您可以配置等待时间,并在测试中使用几毫秒。