我想并行运行Junit测试。我遇到了以下问题
这些测试由其他团队开发,大约有2500个测试套件。测试和测试框架在所有地方都有静态变量。它们的编写方式使它们在一次运行一个套件时工作正常。当我构建一套测试套件并运行它们时,它们甚至都没有完成运行。
为了解决这个问题,我有自己的测试运行器,它通过不同的类加载器(一次一组测试)加载测试套件。我在多个线程中执行此操作,并从每个线程调用JunitCore的run方法。这很好用。这种方法的问题是控制台输出是混合的。
我正在寻找这个问题的解决方案,以便我可以将测试套件的控制台输出分开并将它们重定向到文件中。
这是我正在考虑的一个潜在解决方案。我可以使用不同的类加载器加载类,并将这些类的“Class”对象的数组传递给JunitCore runClasses,其实例为ParallelComputer。
有没有人尝试使用ParallelComputer运行测试套件?如何处理控制台输出?
答案 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。