当前位置: 首页 > 知识库问答 >
问题:

从TestNg数据提供程序返回Hashmap时出现问题

翁鸿远
2023-03-14

我对Java和TestNg非常陌生。我创建了下面的DataProvider来返回一个hashmap到我的测试方法,但它似乎失败了,我无法找出问题所在。我正在将一个excel文件读入哈希图,并将其存储在列表中。然后我想返回对象中的hashmap。

感谢任何建议

@DataProvider(name = "DataProvider")
public Object[][] getTestData() throws Exception {
    LogUtil.error("in provider");
    ExcelUtils.setExcelFile("C://testData.xlsx", "Sheet1");

    int rowsUsed = ExcelUtils.getRowUsed();
    int colsUsed = ExcelUtils.getColumns();

    List<HashMap<String, String>> arrayMapList = new ArrayList<>();
    HashMap<String, String> map;


    for (int i = 0; i < rowsUsed; i++) {
        map = new HashMap<>();
        for (int j = 0; j < colsUsed; j++) {
            map.put(ExcelUtils.getCellData(0, j), ExcelUtils.getCellData(i +1, j));
        }

        arrayMapList.add(map);
    }

    Object[][] obj = new Object[rowsUsed][1];

    for (int i = 0; i <arrayMapList.size(); i++) {
        obj[i][0] = arrayMapList.get(i);
    }
    return obj;
}

共有2个答案

吴高峰
2023-03-14

将方法更改为静态已修复该问题。正如RocketRaccoon回答的那样,我不得不将其更改为静态,因为数据提供者与测试处于不同的类中。

左丘楷
2023-03-14

如果您说添加静态属性解决了您的问题,那么这意味着您试图使用外部类的数据提供程序。在这种情况下,数据提供程序方法必须是静态的。如果测试方法和数据提供程序都在同一个类中,则可以忽略静态属性。

 类似资料:
  • 我想在类中与数据提供者并行运行测试方法。我需要一个数据提供者,它每次在新测试方法开始为给定的测试运行生成部分动态数据之前都会被调用。让我用伪代码解释一下: 我怎样才能做到这一点?

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T

  • 我有一个TestNG Dataprovider测试,如下所示: 输入csv 读者 测验 有许多输入文件,每个测试都包含一个优先级。我想单独运行优先级为1的测试。 在没有数据提供者的情况下,我可以使用下面的IMethodInterceptor过滤测试。 样品测试: 由于数据提供者的优先级是动态的,因此我无法根据优先级过滤测试。 不应执行其他测试,而应跳过其他测试。

  • 我已使用以下方法在应用程序中输入凭据。 其中EnterText定义如下: 在测试类中,我写了下面的代码 我得到以下错误: 失败:loginProxy(“11”,“Priya”)java.lang.NumberFormatException:java.lang.Integer处为空。parseInt(未知源)位于java.lang.Integer。parseInt(未知源) 请帮助解决同样的问题。据

  • 我正在尝试通过TestNG进行多线程测试为测试实例化WebDrivers<代码>@AfterMethod在测试后关闭WebDrivers

  • 我是Spock的新手,目前正在使用它,但我继承了大量需要重复使用的测试配置文件。每个配置文件都是一个JSON,与Spec类同名。对于每种试验方法,都有一个带有参数的地图列表,例如: TestNG允许我在数据提供者方法中传递测试方法名称,因此我可以根据测试类名和测试方法名称返回映射列表。我的基类中只有一个数据提供者方法: 作为这种方法的结果,我得到了一组映射,用于每个测试迭代。然后我将这个方法指定为