3

次のような JUnit テスト ケースがあるとします。

@RunWith(Parameterized.class)
public class TestMyClass {

    @Parameter
    private int expected;
    @Parameter
    private int actual;  

    @Parameters
    public static Collection<Object[]> data() {
    return Arrays.asList(new Object[][] {     
             { 0,1 }, { 1,2 }, { 2,3 }, { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 }  
       });
    }

    @Test
    public void test1 { //test }

    @Test
    public void test2 { //test }

}

{0,1}、{1,2}、および {2,3} でのみ test1 を実行し、{3,4}、{4,5} {5,6} でのみ test2 を実行したい

どうすればこれを達成できますか?

編集: パラメータは実行時にファイルから読み取られます。

4

3 に答える 3

2

JUnit標準の「@Parameters」を使用して、1回のクラスで異なるテストに異なるパラメーターのセットを使用する方法はないようです。junit-dataproviderを試すことができます。これは、TestNG データ プロバイダーに似ています。例えば:

@RunWith(DataProviderRunner.class)
public class TestMyClass {

    @DataProvider
    public static Object[][] firstDataset() {
    return new Object[][] {     
             { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 }  
       };
    }


    @DataProvider
    public static Object[][] secondDataset() {
    return new Object[][] {     
             { 3,4 }, { 4,5 }, { 5,6 },{ 6,7 }  
       };
    }

    @Test
    @UseDataProvider("firstDataset")
    public void test1(int a, int b) { //test }

    @Test
    @UseDataProvider("secondDataset")
    public void test2(int a, int b) { //test }

}

または、テストごとに 2 つのクラスを作成できます。

しかし、junit-dataprovider を使用する方が便利だと思います。

于 2015-09-23T10:19:04.080 に答える
1

それを可能にする多くのjunitライブラリがあります。パラメータを事前に知っている場合(ケースのように見えます)、zohhak を使用したパラメータ化されたテストが最も簡単な場合があります。

@RunWith(ZohhakRunner.class)
public class TestMyClass {      

    @TestWith({
        "1, 6".
        "2, 8",
        "3, 4"
    })
    public void test1(int actual, int expected) { //test }

    @TestWith({
        "2, 2".
        "0, -8",
        "7, 1"
    })
    public void test2(int actual, int expected) { //test }

}

実行時にパラメーターを作成する必要がある場合 (生成、ファイルからの読み取りなど)、junit-dataproviderjunit-paramsなどを確認できます。

于 2015-09-23T10:41:55.270 に答える