如何使用dataprovider获取char数组

时间:2016-11-30 23:56:24

标签: java testng dataprovider

我有一个以char数组作为输入的类,如何使用dataprovider提供数据?

@Test
public void testSomething(){
    char[] list = {'a', 'b', 'c'};
    MyArray myArray = new MyArray();
    myArray.doSomething(list);
}

我想要像这样的数据驱动程序:

{
{'a', 'b', 'c'},
{'a', 'b', 'c', 'd'};
}

问题是,在使用2D数组时,它会将char视为单独的char。因此,"尝试传递3个参数的错误,但方法需要1"。

请帮忙。 谢谢。

2 个答案:

答案 0 :(得分:2)

从问题细节中推断,将数据提供者用于一组数据类型。您可以在DataProvider类中指定测试数据:

@DataProvider(name = "testData")
public static Object[][] testData() {
    char[] data1 = {'a', 'b', 'c'};
    char[] data2 = {'a', 'b', 'c', 'd'};
    return new Object[][]{{data1, data2}};
}

并在测试类中使用相同的内容:

@Test(dataProvider = "testData", dataProviderClass = <ClassName>.class)
public void testSomething(char[] data1, char[] data2){
    MyArray myArray = new MyArray();
    myArray.doSomething(data1);
    myArray.doSomething(data2);
}

或者你可以创建一个char[] data的列表/数组,然后从你的数据提供者那里返回迭代(假设它为

@Test(dataProvider = "testData", dataProviderClass = <ClassName>.class)
public void testSomething(List<List<Character>> charData){
    MyArray myArray = new MyArray();
    for(List<Character> dataTypes : charData) {
    myArray.doSomething(dataTypes);
}

注意 :她,假设您有正确的工作定义MyArray

答案 1 :(得分:1)

也许你可以尝试做这样的事情

public class DataProviderExample {
    @Test (dataProvider = "dp")
    public void testMethod(Character[] myArray) {
        System.err.println("The input array ways : " + Arrays.toString(myArray));
    }

    @DataProvider (name = "dp")
    public Object[][] getData() {
        return new Object[][] {
            {'t', 'e', 's', 't', 'n', 'g'},
            {'j', 'a', 'v', 'a'}
        };
    }
}

运行时生成以下输出(确认测试方法确实接收到字符数组)

The input array ways : [t, e, s, t, n, g]
The input array ways : [j, a, v, a]

===============================================
Default Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================