2012-06-19 81 views
0

我想知道是否有什麼辦法可以在JUnit 4如何動態地添加測試套件的JUnit 4.10

例如動態添加測試套件,我有一個TestClassA下面有測試案例「測試1」

如前所述
class TestClassA 
{ 
    @Test 
    public void test1() 
    { 
     createTestClassDynamically(); // this creates a test class having 
         // setUp(), tearDown() methods and one test case . 
    } 
} 

測試用例TEST1具有方法createTestClassDynamically()動態創建一個新的測試類(可以說TestClassB),其具有設置(),tearDown()方法和一個測試的情況下(可以說TEST2())。

我想運行test1,然後當TestClassB動態生成時,我想要測試用例「test2」也被執行。

我知道這是相當複雜的,而不是最好的事情要做,但在我的框架中,我需要這樣做來動態生成大量的測試類,而不是將它們物理地放在包中。 任何人都可以提供任何幫助/建議嗎?

+0

爲什麼需要動態生成java? –

+0

我需要從類模板生成100個類,然後將這些類添加到當前運行的套件中,以便這些內部的測試用例得到執行。早些時候在junit 3.8中,我們使用suite.addTestSuite(dynamicClassHere)將測試添加到全局套件變量中;但在junit 4.10當我嘗試這種方式時,我得到ConcurrentModificationException。 – user85

回答

0

我已經解決了這是我的框架使用Junit 4的參數化功能,它有助於使用不同的參數執行相同的測試用例。
下面提到的是我如何實現它的示例代碼,如果它幫助任何人,想要發佈它。
此外,如果有人有更好的解決方案,隨時發佈。

class TestClassA 
{ 

    private TestClassB classBObj; 

    public TestClassA(TestClassB obj) { 
    classBObj= obj; 
    } 

@Test 
public void test1() 
{ 
// createTestClassDynamically(); // remove this method as Parameterized 
       // feature will take care of dynamic test execution. 
} 

@Test 
public void test2() 
{ 
// Test case from Test class B using TestClassB object (classBObj) 

} 

public static Collection<Object[]> getParameters() { 
    Collection<Object[]> parameteres = new ArrayList<Object[]>(); 

    Object[] obj1 = new Object[]{new TestClassB()}; 
    Object[] obj2 = new Object[]{new TestClassB()}; 

    parameteres.add(obj1); 
    parameteres.add(obj2); 

    // ....... add more test data this way or create a loop 

    return parameteres; 
    } 
}