3

TestNG Dataprovider に 10 個を超えるパラメーターを渡す必要があり、コードは次のようになります...

@Test (dataProvider = "Dataprovider1")
public void testScenario1(String data1, String data2,
                          String data3, String data4,
                          String data5 //...
            ) throws Exception {
    System.out.println(data1+"---------------- "+data2+" ---------------   "+data3+" .. so on");
}

を使用して 10 個を超えるパラメーターを渡す必要がある場合、どのアプローチに従うべきか誰か教えてもらえます@DataProviderか? テスト メソッドのパラメーターを宣言する他の方法はありますか?

4

4 に答える 4

4

同じタイプのパラメーターがある場合は、メソッドパラメーターで配列として渡すことができます。

@Test (dataProvider = "Dataprovider1")
public void testScenario1(String args [])
            ) throws Exception {
    System.out.println(args[0]+"---------------- "+args[1]+" ---------------   "+args[3]+" .. so on");
}

また、異なるタイプのパラメーター フィールドがある場合は、ヘルパー クラスを使用してそれをくちばしにしてから、このクラスの参照をパラメーターに渡すことができます。例えば:

class Helper {
  String data1;
  String data2;
  String data3;
  Long data4;
  int data5;
  flot data6;
 -----so on------
 ----getter setter and constructor----
}

あなたのテストクラス

class Test {
@DataProvider(name="Dataprovider1")
public static Object[][] testData() {
    return new Object[][] {
            { new Helper("hey", "you", "guys" ..... another constructor parameters..) } }
    };

}

@Test (dataProvider = "Dataprovider1")
public void testScenario1(Helper helper) throws Exception {
    System.out.println(helper.data1+"---------------- "+helper.data2+" ---------------   "+helper.data3+" .. so on");
}
}
于 2017-05-09T05:07:39.307 に答える
0

これを行うと、DataProvider は一種の面倒な構文になってしまいます。次に例を示します。

@DataProvider(name="objectTestData")
public static Object[][] objectTestData() {
    return new Object[][] {
            { new TestData("hey", "you", "guys") },
            { new TestData("Sloth", "Baby", "Ruth") },
            { new TestData("foo", "bar", "baz") }
    };
}

@Test(dataProvider="objectTestData")
public void testScenario1(TestData data) {
    System.out.println(data.get(0) + "..." + data.get(1) + "..." + data.get(2));
}

static class TestData {
    public String[] items;

    public TestData(String... items) {
        this.items = items; // should probably make a defensive copy
    }

    public String get(int x) {
        return items[x];
    }
}

または、TestData コンストラクターを変更して、個別の名前付きメソッドに配置することもできます。(たとえば、住所データをテストする場合、getName、getAddress、getCity が存在する可能性があります。)

于 2015-06-22T21:07:10.767 に答える