如何在 运行 之前并行初始化 JUnit 测试 类

how to initialize JUnit test classes before running in parallel

我正在尝试使用 ParallelComputer 实验性功能并行执行 JUnit 测试,但是我不知道如何在开始测试之前预初始化每个测试 类。

这些应该如何使用的经典示例如下(如下所示GitHub link)。根据示例,我如何在开始并行线程测试之前使用共享数据初始化 ParallelTest1ParallelTest2 类。我能够通过每个 类 中的构造函数来执行此操作,但是我需要确保在 运行 启动之前两个 类 都已完全初始化。这个问题可能不是特定于我希望如何执行测试的并行性质,而是更可能是如何使用一些特殊关键字来阻止初始化对象在需要之前启动。理想情况下,示例 ParallelComputerTest 可以在其构造函数中初始化此共享数据,但是在那种情况下,嵌套静态并行测试 类 如何访问此实例数据?

public class ParallelComputerTest {  

   @Test  
    public void test() {      
      Class[] cls={ParallelTest1.class,ParallelTest2.class };  

      //Parallel among classes  
      JUnitCore.runClasses(ParallelComputer.classes(), cls);  

      //Parallel among methods in a class  
      JUnitCore.runClasses(ParallelComputer.methods(), cls);  

      //Parallel all methods in all classes  
      JUnitCore.runClasses(new ParallelComputer(true, true), cls);     
    }  
   public static class ParallelTest1{  
      @Test public void a(){}  
      @Test public void b(){}  
   }  
   public static class ParallelTest2{  
      @Test public void a(){}  
      @Test public void b(){}  
   }  
}

使用 @Before 进行设置,使用 @After 进行清理。

例如,为了测试控制台输出,我之前设置了流,并在测试后清理结果,如下所示:

@Before
public void setUpStreams() {
    System.setOut(new PrintStream(outContent));
    System.setErr(new PrintStream(errContent));
}

@After
public void cleanUpStreams() {
    System.setOut(null);
    System.setErr(null);
}

注意: 这可能会导致 TestSuite 出现问题,不知道 ParallelTest 是否也会出现问题。如果您遇到一些问题并且您使用 JUnit 4.7 或更高版本,您可能需要检查 this link to rules feature