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

时间:2017-01-24 16:31:55

标签: java junit parallel-processing junit4

我正在尝试使用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(){}  
   }  
}

1 个答案:

答案 0 :(得分:4)

使用@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