2 回答
TA贡献1891条经验 获得超3个赞
模拟的@Capturing
成本可能很高,并且在某些情况下可能会导致意外结果,因此(目前)所有java.*
类都被排除在外。所以,java.util.concurrent.ThreadPoolExecutor
在这个测试中不会被嘲笑(它可以与@Mocked
)。
实际上,RejectedExecutionException
异常永远不会发生(至少不会发生ThreadPoolExecutor
- 可能只会发生ForkJoinPool
)。所以,这个测试不值得付出努力。事实上,由于该异常是一个,RuntimeException
您可以简单地catch
完全删除该块。
这是(滥用)模拟库发生的坏事之一:人们有时使用它们来测试不可能的情况,因此编写无用的测试。
TA贡献1783条经验 获得超4个赞
您可以使用Executorin 参数创建一个新的构造函数。
因此,您的类将更加可配置(因为目前您只能使用一种执行器),并且您将能够通过使用模拟执行器手动实例化该类来测试该类。
public class TaskRegister {
private ExecutorService executor;
public TaskRegister(ExecutorService executor) {
this.executor = executor;
}
public TaskRegister() {
this(Executors.newFixedThreadPool(5));
}
public void executeTask(Runnable task) {
try {
this.executor.submit(task);
} catch (RejectedExecutionException e) {
System.out.println(e.getMessage);
}
}
}
添加回答
举报