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

dev*_*ium 9 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

发现@ http://codemadesimple.wordpress.com/2012/01/17/paramtest_with_junit/

dev*_*ium 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());
    }
}
Run Code Online (Sandbox Code Playgroud)

@ http://hwellmann.blogspot.pt/2009/12/running-parameterized-junit-tests-in.html