TextNG 不接受 Object[][] 数据作为数据提供者
TextNG does not accept Object[][] data as dataprovider
我对 TestNg 有疑问,我正在使用 java 和 Selenium。
我收到来自 TestNG 的消息:
testNG:org.testng.internal.reflect.MethodMatcherException: [public
void
utils.ExcelDataProvider.test1(java.lang.Object[][],org.testng.ITestContext)
throws java.lang.InterruptedException] has no parameters defined but
was found to be using a data provider (either explicitly specified or
inherited from class level annotation). Data provider mismatch Method:
test1([Parameter{index=0, type=[[Ljava.lang.Object;,
declaredAnnotations=[]}, Parameter{index=1,
type=org.testng.ITestContext, declaredAnnotations=[]}])
这是我的@Test
@Test(dataProvider = "test1data")
public void test1(Object[][] data,ITestContext context) throws InterruptedException {
ExcelUtils excel = new ExcelUtils(path, 0);
int rowCount=excel.getRowCount();
int colCount=excel.getColCount();
String iter = context.getCurrentXmlTest().getParameter("iterations");
Execute.execute(data,iter);
}
这是我的 DataProvider
@DataProvider(name = "test1data")
public Object[][] getData() {
Object data[][]=testData(path, 0);
return data;
}
方法:
public Object[][] testData(String path, int sheetIndex) {
ExcelUtils excel = new ExcelUtils(path, sheetIndex);
int rowCount=excel.getRowCount();
int colCount=excel.getColCount();
Object data[][] = new Object[rowCount][colCount];
for(int j=0; j<colCount; j++){
for(int i=0;i<rowCount ;i++ ){
String cellData=excel.getCellData(i, j);
// System.out.println("cellData "+cellData);
data[j][i] = cellData;
}
}
return data;
}
如果我写
public void test1(Object[] data,ITestContext context) throws InterruptedException {
有效 (Object[]
) 但我需要一个二维数组。
你知道这是怎么回事吗?
我正在尝试读取 excel,我希望第一列是 KEY 列,其他列是每次执行的数据。
谢谢
由于测试数据 与与测试方法不匹配而发生错误参数.
针对您的问题的解决方案:
@DataProvider(name = "test1data")
public Object[][] getData() {
Object data[][] = testData(path, 0);
return new Object[][] { { data } };
}
原因: DataProvider with return type 2d array use for executing the same test with different data.
说清楚
public class DP
{
@DataProvider (name = "data-provider")
public Object[][] dpMethod(){
return new Object[][] {{"First-Value"}, {"Second-Value"}};
}
@Test (dataProvider = "data-provider")
public void myTest (String val) {
System.out.println("Passed Parameter Is : " + val);
}
}
结果:
PASSED: myTest("First-Value")
PASSED: myTest("Second-Value")
我对 TestNg 有疑问,我正在使用 java 和 Selenium。 我收到来自 TestNG 的消息:
testNG:org.testng.internal.reflect.MethodMatcherException: [public void utils.ExcelDataProvider.test1(java.lang.Object[][],org.testng.ITestContext) throws java.lang.InterruptedException] has no parameters defined but was found to be using a data provider (either explicitly specified or inherited from class level annotation). Data provider mismatch Method: test1([Parameter{index=0, type=[[Ljava.lang.Object;, declaredAnnotations=[]}, Parameter{index=1, type=org.testng.ITestContext, declaredAnnotations=[]}])
这是我的@Test
@Test(dataProvider = "test1data")
public void test1(Object[][] data,ITestContext context) throws InterruptedException {
ExcelUtils excel = new ExcelUtils(path, 0);
int rowCount=excel.getRowCount();
int colCount=excel.getColCount();
String iter = context.getCurrentXmlTest().getParameter("iterations");
Execute.execute(data,iter);
}
这是我的 DataProvider
@DataProvider(name = "test1data")
public Object[][] getData() {
Object data[][]=testData(path, 0);
return data;
}
方法:
public Object[][] testData(String path, int sheetIndex) {
ExcelUtils excel = new ExcelUtils(path, sheetIndex);
int rowCount=excel.getRowCount();
int colCount=excel.getColCount();
Object data[][] = new Object[rowCount][colCount];
for(int j=0; j<colCount; j++){
for(int i=0;i<rowCount ;i++ ){
String cellData=excel.getCellData(i, j);
// System.out.println("cellData "+cellData);
data[j][i] = cellData;
}
}
return data;
}
如果我写
public void test1(Object[] data,ITestContext context) throws InterruptedException {
有效 (Object[]
) 但我需要一个二维数组。
你知道这是怎么回事吗?
我正在尝试读取 excel,我希望第一列是 KEY 列,其他列是每次执行的数据。
谢谢
由于测试数据 与与测试方法不匹配而发生错误参数.
针对您的问题的解决方案:
@DataProvider(name = "test1data")
public Object[][] getData() {
Object data[][] = testData(path, 0);
return new Object[][] { { data } };
}
原因: DataProvider with return type 2d array use for executing the same test with different data.
说清楚
public class DP
{
@DataProvider (name = "data-provider")
public Object[][] dpMethod(){
return new Object[][] {{"First-Value"}, {"Second-Value"}};
}
@Test (dataProvider = "data-provider")
public void myTest (String val) {
System.out.println("Passed Parameter Is : " + val);
}
}
结果:
PASSED: myTest("First-Value")
PASSED: myTest("Second-Value")