将Hashtable数组转换为对象数组

时间:2010-07-30 05:46:11

标签: java testng

我的问题是我无法将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");
  }
 }*/

}}

2 个答案:

答案 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();

的问题:

  1. 上面的代码不使用泛型,因此到处都会出现警告。
  2. Hashtable可能不是您使用的最佳课程,请尝试HashMapHashTable已同步,因此如果您不希望线程安全,则使用该类将导致代码变慢。
  3. 您应该真正编程到界面:Map map = new HashMap();(或Hashtable如果您愿意。