2012-05-16 61 views
2

JUnit 4中,我們添加使用註釋測試套件以下提到:如何指定@SuiteClasses要添加哪些類在junit4

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

我的查詢是,我們有沒有辦法來指定條件來決定我想將哪些類包含在@SuiteClasses中。例如;可以說在上面的代碼中,如果我想在某些特定條件爲真的情況下類A,否則我不想將它添加到@SuiteClasses中。

在JUnit 3.8我們就用它suite()方法類似下面:

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實現這一目標?

回答

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

盛源的答案將起作用。

另一種選擇是始終添加測試類,但在您的類中有一個assumeTrue(condition),它將決定何時應該運行以及何時不合理。

(當條件與測試先決條件相關時,我更喜歡這種方法:測試本身是知道它是否應該運行的最佳位置)。

相關問題