将 List<DataBean> 存入二维 Object[][]

Store List<DataBean> into two dimention Object[][]

我正在尝试将 json 对象数组反序列化为 java 对象数组。我正在使用数据提供程序将此数据组合传递给测试方法,以便为每个数据集执行测试方法。

我创建了如下所述的数据提供程序方法并反序列化了 Json:

@DataProvider(name = "listData")
public Object[][] listData() throws FileNotFoundException {
    Type listType = new TypeToken<List<DataBean>>() {
    }.getType();
    List<DataBean> data = new GsonBuilder().create().fromJson(new FileReader("resources/data.json"), listType);
    data.forEach(iterator -> System.out.println(iterator.getUsername() + " : : " + iterator.getPassword()));
    return new Object[][]{data.toArray()};
}

测试方法:

@Test(dataProvider = "jsonData")
public void testdata(DataBean dataBean) {
    System.out.println(dataBean.getUsername() + "============" + dataBean.getPassword());

}

和JSON:

[
  {
    "username": "someuser",
    "password": "abc#add"
  },
  {
    "username": "anotheruser",
    "password": "daa#add"
  }
]

很遗憾,它不起作用。如果我像下面那样使用强类型对象,那么它会按预期工作:

    return new Object[][]{{new DataBean("user1", "d121312")},
            {new DataBean("user2", "asdsd")}};

错误:

org.testng.internal.reflect.MethodMatcherException: [public void com.mind.DataProviderUtil.testdata(com.mind.DataBean)] 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: testdata([Parameter{index=0, type=com.mind.DataBean, declaredAnnotations=[]}]) Arguments: [(com.mind.DataBean) com.mind.DataBean@78b66d36,(com.mind.DataBean) com.mind.DataBean@5223e5ee]

有人可以帮我将 List<DataBean> 数据存储在 Object[][] 中,以便我的测试方法对每组数据执行

数据以矩阵形式存储在二维数组中。

假设有一个 3x3 数组,那么矩阵表示将是

1     2     1   

3     4     2

1     2     1

作为数据提供者return 二维数组为数据驱动测试的测试方法提供数据。所以需要提到 Object[][] 适当的大小。我在 JSON 文件中有 2 组数据,我正在反序列化为一个 JAVA 对象,在我的例子中是 DataBean。所以在这里我不得不提到尺寸 Object[dataBean.size()][1]

完整代码:

    Type listType = new TypeToken<List<DataBean>>() {
    }.getType();
    List<DataBean> bean = new GsonBuilder().create().fromJson(new FileReader("resources/data.json"), listType);
    bean.forEach(iterator -> System.out.println(iterator.getUsername() + " : : " + iterator.getPassword()));
    Object[][] data = new Object[bean.size()][1];
    for (int i = 0; i < bean.size(); i++) {
        data[i][0] = bean.get(i);
    }
    return data;