您可以使用JUnit的ParallelComputer
(注意它仍然被認爲是實驗性的)完成此操作。這是一個非常簡單的實現,它由java.util.concurrent.ExecutorService API支持。
如果你好奇它是如何工作的,check out the source。
基本上,您可以撥打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秒內,因爲所有的方法和類並行地運行運行。
這將運行在6s(因爲所有的類都是並行的)。 JUnitCore.runClasses(new ParallelComputer(true, false), classes);
這也將運行在6s(因爲所有的方法是並行的)。 JUnitCore.runClasses(new ParallelComputer(false, true), classes);
您不應該從@Test調用JUnitCore.runClasses()。這會弄亂測試報告。請參閱:https://github.com/junit-team/junit4/issues/1102 並行運行測試的真正解決方案是擴展跑步者或套件 –