我想知道在定义参数化测试时是否可以并行编程运行JUnit测试。我们的想法是能够像在Eclipse中进行常规JUnit测试一样运行它们。
我目前的代码类似于:
@RunWith(Parameterized.class)
public class JUnitDivideClassTests {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] { { 12, 3, 4 }, { 12, 2, 6}, { 12, 4, 3 }});
}
private int n;
private int d;
private int q;
public JUnitDivideClassTests(int n, int d, int q) {
this.n = n;
this.d = d;
this.q = q;
}
@Test
public void test() {
Assert.assertEquals(q, n / d);
}
}
发现@ http://codemadesimple.wordpress.com/2012/01/17/paramtest_with_junit/
答案 0 :(得分:7)
经过一番搜索,我发现我只需要实现(或者更确切地说,使用)以下代码:
public class ParallelizedParameterized extends Parameterized {
private static class ThreadPoolScheduler implements RunnerScheduler {
private ExecutorService executor;
public ThreadPoolScheduler() {
String threads = System.getProperty("junit.parallel.threads", "16");
int numThreads = Integer.parseInt(threads);
executor = Executors.newFixedThreadPool(numThreads);
}
@Override
public void finished() {
executor.shutdown();
try {
executor.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException exc) {
throw new RuntimeException(exc);
}
}
@Override
public void schedule(Runnable childStatement) {
executor.submit(childStatement);
}
}
public ParallelizedParameterized(Class klass) throws Throwable {
super(klass);
setScheduler(new ThreadPoolScheduler());
}
}
@ http://hwellmann.blogspot.pt/2009/12/running-parameterized-junit-tests-in.html