使用ParallelComputer运行Junit测试时的控制台输出

时间:2016-07-12 15:56:50

标签: java junit

我想并行运行Junit测试。我遇到了以下问题

这些测试由其他团队开发,大约有2500个测试套件。测试和测试框架在所有地方都有静态变量。它们的编写方式使它们在一次运行一个套件时工作正常。当我构建一套测试套件并运行它们时,它们甚至都没有完成运行。

为了解决这个问题,我有自己的测试运行器,它通过不同的类加载器(一次一组测试)加载测试套件。我在多个线程中执行此操作,并从每个线程调用JunitCore的run方法。这很好用。这种方法的问题是控制台输出是混合的。

我正在寻找这个问题的解决方案,以便我可以将测试套件的控制台输出分开并将它们重定向到文件中。

这是我正在考虑的一个潜在解决方案。我可以使用不同的类加载器加载类,并将这些类的“Class”对象的数组传递给JunitCore runClasses,其实例为ParallelComputer

有没有人尝试使用ParallelComputer运行测试套件?如何处理控制台输出?

1 个答案:

答案 0 :(得分:0)

我看到当你尝试使用ParallelComputer运行JUnit测试时,std out就会混乱。我期待着这一点,但我尝试了一个小程序。

我的计划在

之下
import org.junit.runner.*;
import org.junit.*;
import org.junit.experimental.*;

public class ParallelComputerTest {  

public static void main(String[] args) {      
Class[] cls={ParallelTest1.class,ParallelTest2.class };  

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

public static class ParallelTest1{  
@Test public void a1(){
    int count = 0;
    while(count < 5) {
    System.out.println("a1");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }

}  
@Test public void b1(){
    int count = 0;
    while(count < 5) {
    System.out.println("b1");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }
}  
}  
public static class ParallelTest2{  
@Test public void a(){
    int count = 0;
    while(count < 5) {
    System.out.println("a2");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }
}  
@Test public void b(){
    int count = 0;
    while(count < 5) {
    System.out.println("b2");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }
}  
}  
} 

输出就像这样

a2
a1
a2
a1
a2
a1
a1
a2
a1
a2
b1
b2
b1
b2
b1
b2
b1
b2
b1
b2

我正在寻找一种方法来解复用stdout。