2017-05-15 46 views
1

是否可以使用JUnitParams和類級別註釋爲每個測試類的方法運行參數化測試?喜歡的東西:類的每種方法的JUnitParams

@RunWith(JUnitParamsRunner.class) 
@Parameters(method = "paramsGenerator") 
public class TestMethod { 

    public Integer[] paramsGenerator() { 
     return new Integer[] {1, 2, 3}; 
    } 

    @Test 
    public void test1(Integer myInt) { 
     ...... 
    } 

    @Test 
    public void test2(Integer myInt) { 
     ...... 
    } 
} 
+2

你問之前試過嗎?這應該是默認行爲。 – BetaRide

+0

是的,應該是,但事實並非如此。我得到了'方法test1應該沒有參數' –

+1

你必須定義一個構造函數,它接受參數並將其存儲在一個字段中。該方法可以使用該字段的值 - 而不是param。 – Andy

回答

1

不,您不能擁有將覆蓋所有測試方法的類級參數註釋。您必須在每種測試方法上聲明@Parameters(method = "paramsGenerator")。你的用例很少見 - 大多數情況下,不同的測試方法需要不同的參數(例如,你有一個有效的方法,一個用於無效輸入)。

0

測試類應該是這樣的:

@RunWith(Parameterized.class) 
public class Testcase { 

    private int myInt; 

    public Testcase(int myInt) { 
     this.myInt = myInt; 
    } 

    @Parameters(name = "{0}") 
    public static Collection<Integer> data() { 
     Integer[] data = new Integer[] {1,2,3,4}; 

     return Arrays.asList(data); 
    } 

    @Test 
    public void test1() { 
     // TODO 
    } 

    @Test 
    public void test2() { 
     // TODO 
    } 
} 

我不知道從何處取得JUnitParamsRunner。正如你在我的例子中看到的,JUnit 4定義了Parameterized

+1

問題是關於[JUnitParams](https://github.com/Pragmatists/JUnitParams),而不是JUnit'Parameterized' –