你可以用JUnit来完成这个(注意它仍然被认为是实验性的)。这是一个非常简单的实现,由java.util.concurrent.ExecutorService API支持。
如果您想知道它是如何工作的,请查看源代码。ParallelComputer
基本上,您为第一个参数调用并传入一个对象。JUnitCore.runClasses(Computer, Classes ...)
ParallelComputer
用法示例:
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 秒内运行,因为所有方法和类都是并行运行的。
这将在6秒内运行(因为所有类都是并行的)。JUnitCore.runClasses(new ParallelComputer(true, false), classes);
这也将在6秒内运行(因为所有方法都是并行的)。JUnitCore.runClasses(new ParallelComputer(false, true), classes);