Я читаю данные из Excel и передаю данные в тест с использованием провайдеров данных. У меня есть 5 параметров, но метод теста выглядит комковато. Итак, я хочу передать один параметр вместо многих. Я пытался сделать это, но тест не удался с ошибкой ниже:
java.lang.ClassCastException: com.utils.ExcelUtil$TestData cannot be cast to [Ljava.lang.Object;
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1225)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
at org.testng.TestNG.run(TestNG.java:1031)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Пожалуйста, найдите мой код ниже:
Test.java
@DataProvider
public Iterator<TestData> getData() throws IOException {
List<TestData> data = excelUtil().getDataFromExcel();
return data.iterator();
}
@Test(dataProvider = "getData")
public void verify(TestData testData) {
System.out.println("Value of t1 : " + testData.t1);
}
ExcelUtil.java
public ExcelUtil(String path) throws IOException {
stream = new FileInputStream(path);
workbook = WorkbookFactory.create(stream);
workSheet = workbook.getSheetAt(0);
}
public List<TestData> getDataFromExcel() {
DataFormatter dataFormatter = new DataFormatter();
List<TestData> data = new ArrayList<TestData>();
Iterator<Row> rowIterator = workSheet.iterator();
TestData testResourceData = new TestData();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
if (row.getRowNum() == 0) {
continue;
}
resourceData.t1 = row.getCell(0).getStringCellValue();
resourceData.t2 = row.getCell(1).getStringCellValue();
Double value = Double.parseDouble(dataFormatter.formatCellValue(row.getCell(2)));
Long longValue = value.longValue();
resourceData.t3 = String.valueOf(longValue.toString());
resourceData.t4 = row.getCell(3).getStringCellValue();
resourceData.t5 = row.getCell(4).getStringCellValue();
data.add(resourceData);
}
return data;
}
public class TestData {
public String t1;
public String t2;
public String t3;
public String t4;
public String t5;
}
Пожалуйста, предложите лучший способ передачи данных в виде одного аргумента.
Спасибо ..