2015-07-01 77 views
0

我有一個需求,即在一個文件夾中維護多個文件,並且我的dataprovider方法將讀取一組文件並構造最終的對象數組以返回。我的方法看起來如下,但它只讀取一個文件事件,即使我遍歷所有文件。有誰能告訴我如何解決這個問題嗎?如何從testng中的多個文件中提供數據提供者

public Object[][] getTestCaseInformationFromFile() throws Exception{ 
      String testDataFile=mdfUtil.readFileAsString("TestDataFilesConfiguration.xml"); 
//retrieving directory path 
      String directoryPath=mdfUtil.getPostId("testData/directoryPath", testDataFile); 
//retrieving file names 
      ArrayList al=mdfUtil.getAssociatedIDs("testData/file", testDataFile); 
      Object[][] data = null; 
      for(int i=0;i<al.size();i++){ 
       csvFile=directoryPath+al.get(i); 
       System.out.println("csvFile-===="+csvFile); 
       log.info("Loading data provider TestCaseInformation..."); 
       ArrayList<ArrayList<String>> lines=readCSVFile(csvFile); 
       int testSize = lines.size(); 
       log.info("Test file has {} tests contained within it." ,testSize); 
       data = new Object[testSize][3]; 
       for (int k=0;k<lines.size();k++) { 
        ArrayList line=lines.get(k); 
        System.out.println("K values is "+k); 
        List testData=new ArrayList(); 
        List validationData=new ArrayList(); 
        testData=line.subList(line.indexOf("IDS")+1,line.indexOf("IDE")); 
        validationData=line.subList(line.indexOf("VDS")+1,line.indexOf("VDE")); 
        System.out.println("testData is==="+testData); 
        String testCaseName=(String)testData.get(4); 
        data[k][0]=testCaseName; 
        data[k][1]=testData; 
        data[k][2]=validationData; 
       } 
      } 
      System.out.println("data lenght is="+data.length); 
      return data; 
     } 
+0

這裏是我的代碼 –

+0

哪裏是你的代碼? –

+0

在問題 –

回答

0

data需要移到循環之外。當你在循環中聲明它時,它將不能在其外部訪問。您需要了解如何設置數組大小。您編寫它的方式,只能得到最後一個CSV文件的結果,對嗎?如果你想使用對象,那麼這就是你將如何把它聲明:

data = new Object[<some value>][3]; 

for(int i = 0; i < al.size(); i++){ 
    csvFile = directoryPath + al.get(i); 
    System.out.println("csvFile-===="+csvFile); 
    log.info("Loading data provider TestCaseInformation..."); 
    ArrayList<ArrayList<String>> lines=readCSVFile(csvFile); 
    int testSize = lines.size(); 
    log.info("Test file has {} tests contained within it." ,testSize); 
    for (int k=0;k<lines.size();k++) { 
     ArrayList line=lines.get(k); 
     System.out.println("K values is "+k); 
     List testData=new ArrayList(); 
     List validationData=new ArrayList(); 

     testData=line.subList(line.indexOf("IDS")+1,line.indexOf("IDE")); 
     validationData=line.subList(line.indexOf("VDS") + 1,line.indexOf("VDE")); 
     System.out.println("testData is==="+testData); 
     String testCaseName=(String)testData.get(4); 
     data[k][0]=testCaseName; 
     data[k][1]=testData; 
     data[k][2]=validationData; 
    } 
} 

如果是我的話,我反而會,宣佈data作爲一個ArrayList,您的結果填充數組列表,然後將轉換爲對象,並返回Object。這是你將如何轉換您的ArrayList爲對象,所以你可以在dataProvider中返回它:

// Now that we know the size of the list, we can define the array size 
    Object[][] retObj = new Object[list1.size()][2]; 
    for (int i = 0; i < list1.size(); i++) { 
     retObj[i][1] = list1.get(i); 
    } 

    return retObj; 
+0

是的,你是正確的格雷格...我在想如何設置在data = new Object [3]; ...我有一個問題將懶惰的數據提供程序解決我問題? –

+0

我剛剛提供了一種使用數組列表來解決問題的方法。 – Greg

+0

懶惰的數據提供程序已經完美地解決了我的問題,如果每個文件中的行數急劇增長,我認爲這將是處理內存相關異常的更加優雅的方法。對於具有中等數量行的文件,您最適合。感謝您的時間 –

相關問題