簡體   English   中英

使用TestNg DataProvider時出錯,必須返回Object [] []或Iterator <Object> [],而不是類[[Ljava.lang.Object;

[英]Error while using TestNg DataProvider must return either Object[][] or Iterator<Object>[], not 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("user@phptravels.com","demouser");
page.login(username,password);
    }
@AfterTest
public void TearDown(){
    TestUtil.quit();
}
} 

數據提供者:

     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:

數據提供者公共靜態java.lang.Object [] [] Utility.TestDataProvider.ExcelDataProvider()必須返回Object [] []或Iterator [],而不是類[[Ljava.lang.Object;

POI版本3.15,TestNGversion 6.10似乎什么都無法解決

問題出在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[][] {{}};
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM