我的问题是我无法将Hashtable数组转换为对象数组。这里的内容读取从xls文件读取每一行,并以这种格式将其保存在哈希表数组中:
roleName = testRole981,admin = admin,projectName = Automateme,userPassword = aspiresys12,roleDesc = grant [testplan_execute],grant [testplan_create_build],grant [testplan_metrics],adminPass = admin,userName = mur
我想将hashTable数组转换为对象数组,以便我可以将testNG测试用例中的那些作为DataProvider传递。
public class DriverScript {
//public boolean isExecuted = true;
Object[][] Obj = new Object[100][100];
@SuppressWarnings("unchecked")
@DataProvider(name="Test")
public Object[][] ValidDataProvider() {
Utilities util = new Utilities();
String pathValue = Utilities.LocatingXls("Data.xls");
Hashtable<String, String>[] hashDrv = (Hashtable<String, String>[]) util.contentReading(pathValue, "Scenario1");
Object[][] Obj = new Object[100][100];
for(int i=0;i<hashDrv.length;i++)
{
System.out.println("cont vector reading" + hashDrv[i].get("projectName"));
Obj[i][0] = hashDrv[i];
}
System.out.println("outsideloop" + Obj[0][0]);
return Obj;
}
@SuppressWarnings("unchecked")
@Test(dataProvider = "Test")
public void methodtest(Hashtable <String, String> a)
{
/* Utilities util = new Utilities();
String pathValue = Utilities.LocatingXls("Data.xls");
Hashtable<String, String>[] hashDrv = (Hashtable<String, String>[]) util.contentReading(pathValue, "Scenario1");
for(int i=0;i<hashDrv.length;i++)
{
System.out.println("cont vector reading" + hashDrv[i].get("projectName"));
Scenario1 scnTst=new Scenario1(hashDrv[i]);
scnTst.check1();
}
if(!isExecuted)
{
Assert.fail("falied");
}
}*/
}}
答案 0 :(得分:1)
由于使用此数据提供程序的测试方法有一个参数,Object[][]
数组的第二个维度应为1,而不是100.也许类似这样(未经测试)的代码:
@SuppressWarnings("unchecked")
@DataProvider(name="Test")
public Object[][] validDataProvider() {
Utilities util = new Utilities();
String pathValue = Utilities.LocatingXls("Data.xls");
Hashtable<String, String>[] hashDrv = (Hashtable<String, String>[])
util.contentReading(pathValue, "Scenario1");
Object[][] obj = new Object[hashDrv.length][1];
for(int i=0; i<hashDrv.length; i++) {
System.out.println("cont vector reading"
+ hashDrv[i].get("projectName"));
obj[i][0] = hashDrv[i];
}
System.out.println("outsideloop" + obj[0][0]);
return obj;
}
答案 1 :(得分:0)
Hashtable
类实现Map
接口。此接口上有一个名为values()
的方法 - 返回Collection
。然后,您可以在该集合上调用toArray()
来获取数组。
示例:
Hashtable h = // .... initialised and populated somewhere else
Collection c = h.values();
Object[] objectArray = c.toArray();
的问题:
Hashtable
可能不是您使用的最佳课程,请尝试HashMap
。 HashTable
已同步,因此如果您不希望线程安全,则使用该类将导致代码变慢。Map map = new HashMap();
(或Hashtable
如果您愿意。