在Eclipse中并行运行JUnit参数化测试

时间:2012-11-22 01:47:02

标签: java eclipse junit

我想知道在定义参数化测试时是否可以并行编程运行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/

1 个答案:

答案 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