2012-05-16 5 views
2

에 @SuiteClasses에 추가 할 수있는 클래스를 지정하는 방법 :아래에 언급 한 바와 같이 우리가 주석을 사용하여 테스트 스위트를 추가 JUnit 4에서는에 junit4

@RunWith(Suite.class) 
@SuiteClasses({ 
A.class, B.class }) 
public class MyTestsuite 
{ 
} 

내 쿼리입니다, 우리가 결정하는 조건을 지정할 수있는 방법이 있나요 @SuiteClasses에 포함시키고 자하는 클래스들. 예를 들어; 위의 코드에서 특정 조건이 참이라면 클래스 A를 원한다면, 그렇지 않으면 @SuiteClasses에 추가하고 싶지 않습니다.

public class MyTestsuite extends TestCase 
{ 
    public static Test suite() 
    { 
    TestSuite suite = new TestSuite(); 
    if(some_condition_true) 
    { 
     suite.addTest(A.suite); 
    } 
    suite.addTest(B.suite); 
    return suite; 
    } 
} 

우리의 JUnit 4를 사용하여이를 달성 할 수있는 방법이 있나요 : 아래에 언급처럼의 JUnit 3.8에서

우리는 스위트() 메소드를 사용합니까?

답변

2

스위트 룸을 확장 :

@RunWith(MySuite.class)//Customized 
@SuiteClasses({ 
A.class, B.class }) 
public class MyTestsuite 
{} 

이 MySuite을 정의

public class MySuite extends Suite { 
      public MySuite(Class<?> klass, RunnerBuilder builder) 
        throws InitializationError { 
       super(klass, builder); 
       try { 
        filter(new Filter() { 
         @Override public boolean shouldRun(Description description) { 
          return some_condition_true? true : false; 
         } 

         @Override 
         public String describe() { 
          return "..."; 
         } 
        }); 
       } catch (NoTestsRemainException e) { 
        System.out.println("Hey, all test cases are not satisfied your condition."); 
       } 
      } 
     } 

플러스 : 작동 할 수 있지만, 나는 간단한 테스트 케이스를 유지하는 것이 좋습니다. 복잡한 것을 유지하는 것은 어렵습니다.

+0

예를 들어 A.class와 B.class를 처리한다고 가정하면 값을 MySuite에 전달하여 확인할 수 있습니까? – jantox

0

Shengyuan 답변드립니다.

또 다른 옵션은 항상 테스트 클래스를 추가하는 것이지만 실행 시간을 결정할 때 및 의미가없는 경우를 결정하는 클래스에 True (조건)를 가정합니다.

(조건이 테스트 전제 조건과 관련되어있을 때 그 접근법이 더 좋음 : 테스트 자체가 실행되어야하는지 여부를 알기 가장 좋은 장소입니다.)

관련 문제