【问题标题】:Store List<DataBean> into two dimention Object[][]将 List<Data Bean> 存储到二维 Object[][] 中
【发布时间】:2020-09-04 13:43:27
【问题描述】:

我正在尝试将 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: [公共无效 com.mind.DataProviderUtil.testdata(com.mind.DataBean)] 没有 定义的参数,但被发现使用数据提供程序(要么 显式指定或从类级别注释继承)。数据 提供者不匹配方法:testdata([Parameter{index=0, type=com.mind.DataBean, declaredAnnotations=[]}]) 参数: [(co​​m.mind.DataBean) com.mind.DataBean@78b66d36,(com.mind.DataBean) com.mind.DataBean@5223e5ee]

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

【问题讨论】:

  • "如果我使用如下所示的强类型对象,那么它的工作将按预期进行";如果可行,您可以作为解决方法(或解决方案)尝试new Object[][]{data.toArray(new DataBean[0])},它将创建DataBean[] 而不是Object[]
  • @Marcono1234,感谢您的回复,但我遇到了与之前相同的错误

标签: java testng


【解决方案1】:

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

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

1     2     1   

3     4     2

1     2     1

作为数据提供者返回二维数组以向数据驱动测试的测试方法提供数据。所以需要提到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;

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多