在使用ExecutorService时,单元测试如何为可运行任务派生新线程?
基本上,我的应用程序有一个静态线程池。
public static final ExecutorService executorService = Executors.newCachedThreadPool();我希望将这个线程池用于我的单元测试,而不是模拟一个线程池或注入一个新的线程池,因为不同的线程池可以极大地改变我的应用程序的行为(固定线程池、缓存线程池和调度线程池等等);我希望确保使用其运行时线程池测试应用程序的行为。
缓存线程池似乎最适合我。问题是,由于它是静态的,并且线程被缓存了60秒,所以只有第一个测试会在池中实际产生一个新线程,而随后的测试会重用该线程。
单元测试代码:
public void testDoCallExecutesTaskInAnotherThread() {
final Client client = this.createClient();
final ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) client.getExecutorService(); // gets the static thread pool
final int initPoolSize = threadPoolExecutor.getPoolSize();
final Response response = client.doCall();
Assert.assertEquals(initPoolSize + 1, threadPoolExecutor.getPoolSize());
}
建议如何让这个工作,或另一种方法,将不胜感激。
发布于 2009-11-04 03:12:17
模拟ThreadFactory
ThreadFactory mock = new CustomObservableThreadFactory();
ExecutorService executorService = Executors.newCachedThreadPool(mock);https://stackoverflow.com/questions/1669453
复制相似问题