9

パラメータ化されたテストを定義するときに、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/で見つかりました

4

1 に答える 1

8

いくつか検索したところ、次のコードを実装する(というよりは使用する)必要があることがわかりました。

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

于 2012-11-23T03:14:10.353 に答える