1

ここでの問題は、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");
  }
 }*/

}}
4

2 に答える 2

1

このデータ プロバイダーを使用するテスト メソッドにはパラメーターが 1 つあるため、Object[][]配列の 2 番目の次元は 100 ではなく 1 である必要があります。おそらく、次の (テストされていない) コードのようなものです。

@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;
}
于 2010-07-30T06:06:51.680 に答える
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、あなたが望むなら.
于 2010-07-30T06:00:18.857 に答える