2011-02-18 10 views
4

저는 Java 프로그래밍과 JUnit 테스트를 처음 접했습니다. junit-4.5와 함께 제공되는 NetBeans 6.9.1을 사용합니다 (그러나 junit-4.8.2를 내 라이브러리에 추가했습니다).JUnit : 동시 테스트 실행

나는 많은 테스트 클래스를 가지고 있으며, 각 클래스에는 많은 수의 @Test 메소드가있다.

특정 Test 클래스를 실행하면 각 @Test 메서드를 한 번에 하나씩 실행합니다. 또한 각각의 테스트 클래스와 각각의 @Test 메소드를 실행할 때마다 실행되는

으로 테스트 스위트를 만들었습니다.

제 질문은 : 테스트 클래스를 동시에 실행할 수 있습니까? 또는 각 테스트 클래스 내에서 @Test 메서드를 동시에 실행할 수 있습니까?

이렇게하면 클래스와 메소드가 한 번에 하나씩 실행되는 것보다 훨씬 빨리 모든 테스트를 실행할 수 있습니다.

감사합니다.

+0

단위 테스트는 얼마나 오래 실행됩니까? – khmarbaise

+0

어디서나 1 초 미만 30-60 초. 응용 프로그램은 데이터 서버와 통신하므로 여러 개의 요청을 동시에 실행하여 테스트의 속도를 높이고 싶습니다. – kmccoy

+0

30-60 초마다 실행할 필요가 없다면 30-60 초가 적당한 양의 시간이라고 생각합니다. –

답변

7

사용 org.junit.experimental.ParallelComputer : 샘플 :

public class NewTestSuite { 

     public static void main(String[] s){ 

     Class[] cls={TestClassA.class,TestClassB.class,TestClassB.class }; 

     //simultaneously all methods in all classes 
     Result result = JUnitCore.runClasses(new ParallelComputer(true, true), cls); 
     System.out.print(result.wasSuccessful()); 

     //simultaneously among classes 
     //Result result = JUnitCore.runClasses(ParallelComputer.classes(), cls); 

     //simultaneously among methods in a class 
     //Result result = JUnitCore.runClasses(ParallelComputer.methods(), cls); 
     } 
    } 
+0

감사합니다. 그것은 유망 해 보인다. 이 코드는 어디에 두어야합니까? 내 NewTestSuite 클래스 파일에? 또는 ... 코드를 사용하는 테스트 스위트를 어떻게 작성 하시겠습니까? – kmccoy

+0

환영합니다. 코드를 @Test 메소드 또는 메인 메소드에 넣는다. 그리고 테스트 케이스가 정말로 오랜 시간을 소비하지 않는다면이 기능이 필요 없다고 생각합니다. –

+0

감사합니다. 향후 테스트 케이스가 몇 시간 동안 실행될 수 있으므로 동시에 몇 가지 테스트를 실행하는 것이 좋습니다. – kmccoy

1

당신은이 간단한 예제를 시도 할 수 있습니다 : 을 JUnitCore, 우리는 빌드에서이 없기 때문에 내가하는 주장을 추가

public class TestParallelExecution { 
private Logger logger = LoggerFactory.getLogger(TestParallelExecution.class); 

@Test 
public void runAllTest(){ 
    //add test class 
    Class[] testClasses={testClass1.class, testClass2.class, }; 

    //Parallel execute only classes 
    Result resultClasses = JUnitCore.runClasses(ParallelComputer.classes(), testClasses); 

    //Parallel execute only methods in classes 
    Result result = JUnitCore.runClasses(ParallelComputer.methods(), testClasses); 

    //Run Parallel all methods in all test classes which declare in testClasses[] 
    //method accept new ParallelComputer(classes, methods) 
    Result result = JUnitCore.runClasses(new ParallelComputer(true, true), testClasses); 
    List<Failure> failures = result.getFailures(); 


    if(result1.wasSuccessful() != true){ 
     StringBuilder sb = new StringBuilder(); 
     for(int i = 0; i < failures.size(); i++){ 
      sb.append(System.lineSeparator()); 
      sb.append("<---------------New test method--------------->"); 
      sb.append(System.lineSeparator()); 
      sb.append(failures.get(i).toString()); 
      sb.append(System.lineSeparator()); 
     } 
     File file = new File("C:\\..\\FailedTest.txt"); 
     try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { 
      writer.write(sb.toString()); 
      writer.close(); 
     } catch (IOException e) { 
      logger.trace("I can't create file,because : ", e); 
     } 
     //logger.error(sb.toString()); 
     assertTrue(false); 
    }else { 
     assertTrue(true); 
     } 
    } 
}