2011-08-19 37 views
1

尝试使用ThreadFactory创建单元测试(边界集成测试),并且只是想知道如何“强制”Java/JVM无法创建更多线程?Java ThreadFactory如何创建ThreadCreationException在JUnit中测试

换句话说,我该如何调用ThreadFactory.newThread并获得null?

import org.jboss.threads.JBossThreadFactory.JBossThreadFactory; 
import java.util.concurrent.ThreadFactory; 

private final ThreadFactory threadFactory; 

JBossThreadFactory threadFactory = new JBossThreadFactory(null, null, null, "test thread %p %t", null, null); 

final Thread thread = threadFactory.newThread(new Worker(task)); 
if (thread == null) { 
    throw new ThreadCreationException(); 
} 

回答

2

如果使用依赖注入,那么你可以创建一个模拟的ThreadFactory:

private class NullThreadFactory implements ThreadFactory { 
    public Thread newThread(Runnable r) { 
     return null; 
    } 
} 

和特定的单元测试注射使用NullThreadFactory代替JBossThreadFactory的。

+1

+1:或创建线程计数后失败的一个。 –

+0

谢谢你,这很适合。 – portoalet