且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

与Junit并行运行测试

更新时间:2022-05-23 22:21:24

您可以使用JUnit的 ParallelComputer 来完成此操作(请注意,它仍被认为是实验性的).这是一个非常简单的实现,由java.util.concurrent.ExecutorService API支持.
如果您想知道它的工作方式,请

You can accomplish this with JUnit's ParallelComputer (note it's still considered experimental). It's a pretty simple implementation which is backed by the java.util.concurrent.ExecutorService API.
If you're curious how it works, check out the source.

基本上,您调用 JUnitCore.runClasses(Computer,Classes ...)并将第一个参数传入 ParallelComputer 对象.

Basically you call JUnitCore.runClasses(Computer, Classes ...) and pass in a ParallelComputer object for the first argument.

示例用法:

import org.junit.Test;
import org.junit.experimental.ParallelComputer;
import org.junit.runner.JUnitCore;

public class ParallelComputerExample {

    @Test
    public void runAllTests() {
        Class<?>[] classes = { ParallelTest1.class, ParallelTest2.class };

        // ParallelComputer(true,true) will run all classes and methods 
        // in parallel.  (First arg for classes, second arg for methods)
        JUnitCore.runClasses(new ParallelComputer(true, true), classes);
    }

    public static class ParallelTest1 {
        @Test
        public void test1a() {
            lookBusy(3000);
        }

        @Test
        public void test1b() {
            lookBusy(3000);
        }
    }

    public static class ParallelTest2 {
        @Test
        public void test2a() {
            lookBusy(3000);
        }

        @Test
        public void test2b() {
            lookBusy(3000);
        }
    }

    public static void lookBusy(long ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            System.out.println("interrupted");
        }
    }
}

上面的代码将在3秒钟内运行,因为所有方法和类都是并行运行的.

The above code will run in 3 seconds because all methods and classes are ran in parallel.

这将在6s内运行(因为所有类都是并行的). JUnitCore.runClasses(new ParallelComputer(true,false),classes);

This will run in 6s (because all classes are in parallel). JUnitCore.runClasses(new ParallelComputer(true, false), classes);

这也将在6s内运行(因为所有方法都是并行的). JUnitCore.runClasses(new ParallelComputer(false,true),classes);

This will also run in 6s (because all methods are in parallel). JUnitCore.runClasses(new ParallelComputer(false, true), classes);