2017-02-28 74 views
0

测试用例:使用TestNg DataProvider时出错必须返回Object [] []或迭代器<Object> [],而不是class [[Ljava.lang.Object;

package Test; 
import org.testng.annotations.AfterTest; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 
import Page.LoginPage; 
import Utility.TestDataProvider; 
import Utility.TestUtil; 
//Testcase to perform login 
public class LoginTest { 
LoginPage page=new LoginPage(); 

@Test(dataProvider="ExcelDataProvider",dataProviderClass=TestDataProvider.class) 
public void Logintest(String username,String password){ 

//page.login("[email protected]","demouser"); 
page.login(username,password); 
    } 
@AfterTest 
public void TearDown(){ 
    TestUtil.quit(); 
} 
} 

的DataProvider:

 package Utility; 
     import org.testng.annotations.DataProvider; 
     import org.testng.annotations.Parameters; 
     import org.testng.annotations.Test; 
     public class TestDataProvider { 
     static ExcelReader reader=new ExcelReader(); 
     @DataProvider(name="ExcelDataProvider") 
     public static Object[][] ExcelDataProvider() 
     { 
     Object [][] rest = reader.readDataExcel("UserLogin"); 
     return rest; 
    } 
    } 

ExcelReader:

package Utility; 
import java.io.File; 
import java.io.FileInputStream; 
import java.util.List; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.DataFormatter; 
import org.apache.poi.ss.usermodel.Row; 

import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFTable; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 


public class ExcelReader { 

    static String fileName="Testdata"; 
    public Object[][] readDataExcel(String TableName){ 
     String filePath="F:\\TravelSite\\TravelSiteAutomation\\Testdata.xlsx"; 
     File file =new File(filePath); 


     try{ 
     FileInputStream stream=new FileInputStream(file); 
       Workbook workbook = new XSSFWorkbook(stream); 
       XSSFSheet sheet=(XSSFSheet) workbook.getSheet("UnitTest"); 
       List<XSSFTable> tables = sheet.getTables(); 

       for(XSSFTable table:tables){ 
        String name=table.getName(); 
        if(name.equals(TableName)){ 


         int ci=0,cj=0; 
         int rowNum=sheet.getLastRowNum()-sheet.getFirstRowNum(); 
         //System.out.println(rowNum); 


         String[][] dataArray=new String[rowNum][100]; 
         for(int i = 1; i < rowNum+1; i++) { 

          Row row = sheet.getRow(i); 



          //Create a loop to print cell values in a row 
          int colNum=row.getLastCellNum(); 
          // System.out.println(colNum); 
          for(int j = 0; j <colNum; j++) { 


           //Print excel data in console 
            Cell cell=row.getCell(j); 
            DataFormatter formatter = new DataFormatter(); 
            String var_name = formatter.formatCellValue(cell); 
           System.out.print(var_name+" || "); 
           dataArray[ci][cj]=var_name; 

          } 

          System.out.println(); 
          } 
         workbook.close(); 

       return dataArray; 
         } 

        } 
       Log.info("Table name is incorrect"); 
       return null; 
       } 



      catch(Exception e) 

     { 
       Log.debug(e.getMessage()); 


       return null; 
      } 
     } 
    } 

所以当我尝试运行测试用例我得到一个错误 org.testng.TestNGException:

数据提供程序public static java.lang.Object [] [] Utility.TestDataProvider.ExcelDataProvider()必须返回 Object [] []或Iterator [],而不是class [[Ljava.lang.Object;

似乎没有任何解决它,POI 3.15版,6.10 TestNGversion

+0

你确定你的数据提供者没有返回null吗? –

+0

是的。不返回空 –

+1

它看起来像一个错误。你可以在https://github.com/cbeust/testng/issues/上打开一个问题吗? – juherr

回答

2

的问题是与ExcelReader类。请在下面找到应该解决问题的固定版本

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.DataFormatter; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFTable; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import java.util.ArrayList; 
import java.util.List; 

public class ExcelReader { 

    public static String[][] readDataExcel(String TableName) { 
     String filePath = "src/test/resources/Testdata.xlsx"; 
     try { 
      Workbook workbook = new XSSFWorkbook(filePath); 
      XSSFSheet sheet = (XSSFSheet) workbook.getSheet("UnitTest"); 
      List<XSSFTable> tables = sheet.getTables(); 

      for (XSSFTable table : tables) { 
       String name = table.getName(); 
       if (! name.equals(TableName)) { 
        continue; 
       } 
       int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum(); 
       System.out.println(rowCount); 
       int columnCount = - 1; 
       List<List<String>> data = new ArrayList<>(); 
       for (int i = 1; i < rowCount + 1; i++) { 
        Row row = sheet.getRow(i); 
        int colNum = row.getLastCellNum(); 
        if (columnCount == - 1) { 
         columnCount = colNum; 
        } 
        List<String> rowData = new ArrayList<>(); 
        for (int j = 0; j < colNum; j++) { 
         Cell cell = row.getCell(j); 
         DataFormatter formatter = new DataFormatter(); 
         String var_name = formatter.formatCellValue(cell); 
         if (var_name != null && ! var_name.trim().isEmpty()) { 
          rowData.add(var_name); 
         } 
        } 
        if (! rowData.isEmpty()) { 
         data.add(rowData); 
        } 
       } 
       workbook.close(); 
       String[][] dataArray = new String[rowCount-1][columnCount]; 
       int rowIndex = 0; 
       for (List<String> row : data) { 
        int colIndex = 0; 
        for (String rowData : row) { 
         dataArray[rowIndex][colIndex++] = rowData; 
        } 
        rowIndex++; 
       } 
       return dataArray; 
      } 
      System.err.println("Table name is incorrect"); 
      return new String[][] {{}}; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return new String[][] {{}}; 
     } 
    } 
} 
相关问题