2 回答

TA貢獻1891條經(jīng)驗 獲得超3個贊
模擬的@Capturing
成本可能很高,并且在某些情況下可能會導(dǎo)致意外結(jié)果,因此(目前)所有java.*
類都被排除在外。所以,java.util.concurrent.ThreadPoolExecutor
在這個測試中不會被嘲笑(它可以與@Mocked
)。
實際上,RejectedExecutionException
異常永遠不會發(fā)生(至少不會發(fā)生ThreadPoolExecutor
- 可能只會發(fā)生ForkJoinPool
)。所以,這個測試不值得付出努力。事實上,由于該異常是一個,RuntimeException
您可以簡單地catch
完全刪除該塊。
這是(濫用)模擬庫發(fā)生的壞事之一:人們有時使用它們來測試不可能的情況,因此編寫無用的測試。

TA貢獻1783條經(jīng)驗 獲得超4個贊
您可以使用Executorin 參數(shù)創(chuàng)建一個新的構(gòu)造函數(shù)。
因此,您的類將更加可配置(因為目前您只能使用一種執(zhí)行器),并且您將能夠通過使用模擬執(zhí)行器手動實例化該類來測試該類。
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);
}
}
}
添加回答
舉報