繁体   English   中英

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

[英]Console output when running Junit tests with ParallelComputer

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

这些测试是由其他团队开发的,大约有2500个测试套件。 测试和测试框架到处都有静态变量。 编写它们的目的是使它们一次运行一个套件时可以正常工作。 当我构建一组测试套件并运行它们时,它们甚至无法完全运行。

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

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

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

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

我看到当您尝试使用ParallelComputer运行JUnit测试时,标准输出混在一起了。 我期待如此,但是我尝试了一个小程序。

我的程序在下面

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

我正在寻找一种多路分解标准输出的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM