TextNG 不接受 Object[][] 数据作为数据提供者

TextNG does not accept Object[][] data as dataprovider

我对 TestNg 有疑问,我正在使用 java 和 Selenium。 我收到来自 TestNG 的消息:

testNG:org.testng.internal.reflect.MethodMatcherException: [public void utils.ExcelDataProvider.test1(java.lang.Object[][],org.testng.ITestContext) throws java.lang.InterruptedException] has no parameters defined but was found to be using a data provider (either explicitly specified or inherited from class level annotation). Data provider mismatch Method: test1([Parameter{index=0, type=[[Ljava.lang.Object;, declaredAnnotations=[]}, Parameter{index=1, type=org.testng.ITestContext, declaredAnnotations=[]}])

这是我的@Test

@Test(dataProvider = "test1data")
    public void test1(Object[][] data,ITestContext context) throws InterruptedException {

        ExcelUtils excel = new ExcelUtils(path, 0);
        int rowCount=excel.getRowCount();
        int colCount=excel.getColCount();
        String iter = context.getCurrentXmlTest().getParameter("iterations");
        Execute.execute(data,iter);
}

这是我的 DataProvider

@DataProvider(name = "test1data")
    public Object[][] getData() {
        Object data[][]=testData(path, 0);
        return data;
    }

方法:

public Object[][] testData(String path, int sheetIndex) {
        ExcelUtils excel = new ExcelUtils(path, sheetIndex);
        int rowCount=excel.getRowCount();
        int colCount=excel.getColCount();

        Object data[][] = new Object[rowCount][colCount]; 

        for(int j=0; j<colCount; j++){
            for(int i=0;i<rowCount ;i++ ){
                String cellData=excel.getCellData(i, j);
//              System.out.println("cellData "+cellData);
                data[j][i] = cellData;
            }
        }
        return data;

    }

如果我写

public void test1(Object[] data,ITestContext context) throws InterruptedException {

有效 (Object[]) 但我需要一个二维数组。

你知道这是怎么回事吗?

我正在尝试读取 excel,我希望第一列是 KEY 列,其他列是每次执行的数据。

谢谢

由于测试数据 测试方法不匹配而发生错误参数.

针对您的问题的解决方案

@DataProvider(name = "test1data")
    public Object[][] getData() {
        Object data[][] = testData(path, 0);
        return new Object[][] { { data } };
    }

原因: DataProvider with return type 2d array use for executing the same test with different data.

说清楚

public class DP
{
 @DataProvider (name = "data-provider")
 public Object[][] dpMethod(){
 return new Object[][] {{"First-Value"}, {"Second-Value"}};
 }

    @Test (dataProvider = "data-provider")
    public void myTest (String val) {
        System.out.println("Passed Parameter Is : " + val);
    }
}

结果:

PASSED: myTest("First-Value")
PASSED: myTest("Second-Value")