【发布时间】: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=[]}]) 参数: [(com.mind.DataBean) com.mind.DataBean@78b66d36,(com.mind.DataBean) com.mind.DataBean@5223e5ee]
有人可以帮我将List<DataBean> 数据存储在Object[][] 中,以便我的测试方法针对每组数据执行
【问题讨论】:
-
"如果我使用如下所示的强类型对象,那么它的工作将按预期进行";如果可行,您可以作为解决方法(或解决方案)尝试
new Object[][]{data.toArray(new DataBean[0])},它将创建DataBean[]而不是Object[]。 -
@Marcono1234,感谢您的回复,但我遇到了与之前相同的错误