gpt4 book ai didi

java - ScheduledThreadPoolExecutor 的单元测试

转载 作者:行者123 更新时间:2023-11-30 10:48:13 27 4
gpt4 key购买 nike

假设我有这样的方法

public void scheduleCleanup(String parameter) {
final SomeObject someObject = new SomeObject(parameter);
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
executor.schedule((Runnable) () -> cleanupService.startCleanup(someObject),
CLEANUP_TIMEOUT_SEC, TimeUnit.SECONDS);
}

这意味着 cleanupService.startCleanup(someObject)CLEANUP_TIMEOUT_SEC 之后调用,这实际上来自某些属性文件。

对我来说,很明显我可以创建 SomeObject 并为 cleanupService.startCleanup(someObject) 编写单元测试,但是我如何处理 scheduleCleanup 方法?

  1. 我假设我需要模拟它,但在这种情况下您如何做?
  2. 是否可以避免模拟?在这种情况下最好的方法是什么?

最佳答案

我猜您想避免在单元测试中使用/调用 ScheduledThreadPoolExecutor。我会用 ScheduledExecutorService 替换 ScheduledThreadPoolExecutor 并将其注入(inject)到类中:

@Inject ExecutorService executor;

public void scheduleCleanup(String parameter) {
final SomeObject someObject = new SomeObject(parameter);
executor.schedule((Runnable) () -> cleanupService.startCleanup(someObject),
CLEANUP_TIMEOUT_SEC, TimeUnit.SECONDS);
}

然后您可以简单地验证是否在适当的位置调用了 executor.schedule(Runnable, long, TimeUnit)

关于java - ScheduledThreadPoolExecutor 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35892264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com