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

问题描述 投票:0回答:1

我对TestNg有问题,我在Selenium中使用Java。我有来自TestNG的消息:

testNG:org.testng.internal.reflect.MethodMatcherException:[public 虚空 utils.ExcelDataProvider.test1(java.lang.Object [] [],org.testng.ITestContext) 抛出java.lang.InterruptedException]没有定义参数,但是 被发现正在使用数据提供者(明确指定或 从类级别的注释继承)。数据提供者不匹配方法: test1([Parameter {index = 0,type = [[Ljava.lang.Object ;, clarifiedAnnotations = []},参数{index = 1, type = org.testng.ITestContext,clarifiedAnnotations = []}])]

这是我的@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(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列,而其他列为每次执行的数据。

enter image description here

谢谢

java excel selenium testng
1个回答
0
投票

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

您的问题的解决方案:

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

原因:具有返回类型2d数组的DataProvider用于执行相同的测试不同数据。

使其更加清晰

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")
© www.soinside.com 2019 - 2024. All rights reserved.