如何测试Java调度器(ScheduledExecutorService)?

如何测试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

这是我尝试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) {
        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
,而不是自己创建它。这样,您就可以通过一个假密码,请参见。或者,很明显,您可以配置等待时间,并在测试中使用几毫秒。