2012-05-05 51 views
1

我有一大堆的參數JUnit4測試,所有看起來像:參數測試套件

@RunWith(Parameterized.class) 
public class MyTestX { 
    private final MyParameter param; 
    public TestX(MyParameter param) { 
    this.param = param; 
    } 

    @Test 
    public void myTest() { 
    // Some test code 
    } 
} 

我想從不同的測試套件運行它們,每個與MyParameter不同的值。

我試過如下:

@RunWith(Suite.class) 
@SuiteClasses({ MyTest1.class, MyTest2.class, ... }) 
public class MyTestSuite1 { 

    @Parameters 
    public static Collection<Object[]> data() { 
    Object[][] data = {{ new MyParameter(1))}}; 
    return Arrays.asList(data); 
    } 
} 

但它不工作:我碰到一個「階級MyTestX沒有公共靜態參數的方法」。

有沒有辦法從測試套件中指定參數而不是測試用例? 我想避免爲每個測試創建一個新類,如果可能的話,爲每個測試套件創建一個新類。

+0

我認爲要做到這一點,你不得不爲了兩套房和參數亞軍類擴展爲前捕捉到的參數數據,並把它傳遞給孩子跑步者,並且後者接收不是來自注釋方法的參數數據,而是來自套件跑步者。 – viaclectic

回答

0

這聽起來像你想運行不同測試具有相同的參數。

參數化測試是針對不同參數運行相同測試。如果你的測試不完全一樣,那麼你需要不同的測試。

您需要做的是將不同的@Test方法添加到您的MyTestX類中,並忘記參數化測試。那麼你只會有一門課,你的考試將以一種明確的方式組織起來。

1

我有一個類似的問題。它通過創建一個包含@Parameters@RunWith(Parameterized.class)的抽象類來修復。這個類被測試套件中的所有測試擴展了。我發現了事情之一是,@Parameters@BeforeClass@Before前稱,這些註釋是否測試套件或測試中。希望這有助於。

0

我學習JUnit和webdriver的和我的JUnit的實踐過程中,我也得到了類似的錯誤。不知道我的答案會有多大用處,但值得一試。

請檢查您的import語句,應該有正確的參數聲明即進口org.junit.runners.Parameterized.Parameters;

如果它與任何其他參數聲明碰撞,然後嘗試刪除其他的語句,並只保留此聲明。

這解決了我的問題。

剛看到這個帖子是2年舊的,但,這可能幫助別人,現在得到了同樣的問題。

0

我想從不同的測試套件中運行它們,每個測試套件都具有不同的MyParameter值。

你的要求是的Parameterized正常行爲不同:如果你定義的測試層次結構和分配相同的參數集(Object[][])給他們,JUnit框架將運行的所有參數測試,首測情況下,前進到下一個測試案例前,所有參數運行它。

所以如果要執行所有測試單個參數的第一纔去到下一個參數,你需要的另一個亞軍。看看this library,它爲您提供ParameterizedSuite轉輪。

參數化測試套件看起來是這樣的:

@RunWith(ParameterizedSuite.class) 
@SuiteClasses({OneTest.class, TwoTest.class}) 
public class MyParameterizedTestSuite { 
    @Parameters(name = "Parameters are {0} and {1}") 
    public static Object[] params() { 
     return new Object[][] {{'A',1}, {'B',2}, {'C',3}}; 
    }