我正在将excel数据写入数组并通过@dataprovider返回相同的数据。代码看起来像这样 -
for(i=0;i<numrow+1;i++){
for (j=0;j<numcol;j++ ){
if(xlsh.getRow(i).getCell(j)!=null){
xldata[i][j]=xlsh.getRow(i).getCell(j).toString();
}
else{
xldata[i][j]="";
}
}
}
return xldata;
我正在阅读的excel有大约40列,我想在@test方法中将相同的内容写入数组。所以我尝试在@test方法中使用下面的代码来读取@dataprovider提供的数据
@Test(dataProvider = "name")
public void mymethod(String[] fromxl) {
//code
}
但不知怎的,数组不被识别为数组,我收到错误说 - dataprovider有40个参数,但测试方法只接受1。 现在如果我在我的测试方法中将数组更改为40个不同的参数(下面的示例代码),它似乎正在工作。但我不想这样做,因为这很麻烦。我无法使数组在我的测试方法中工作的任何原因?感谢关于此
的任何帮助/指示@Test(dataProvider = "name")
public void mymethod(String data1, .. , String data40) {
//code
}
答案 0 :(得分:0)
要将数组作为参数传递给测试,您只需将其包装在Object[][]
使用的DataProvider
中。这样的事情应该做你想做的事情:
private String[] buildSingleDimensionArray() {
String[] result = new String[40];
for (int i = 0; i < result.length; i++) {
result[i] = "element" + i;
}
return result;
}
@DataProvider(name = "arrayBuilder")
public Object[][] createData() {
return new Object[][] { { buildSingleDimensionArray() }, };
}
@Test(dataProvider = "arrayBuilder")
public void theTest(String[] inputArray) {
for (int i = 0; i < inputArray.length; i++) {
System.out.println(inputArray[i]);
}
}
答案 1 :(得分:0)
您的测试只需要一个参数 - 字符串数组。所以你的xldata应该以字符串数组的形式返回一个参数。
for(i=0;i<numrow+1;i++){
for (j=0;j<numcol;j++ ){
if(xlsh.getRow(i).getCell(j)!=null){
//Build fresh array here instead of writing directly to return
freshArr[j] = ...
}
else{
freshArr[0] = "" ;
}
//once all columns are read, set that to the return array
xldata[i][0] = freshArr;
}
}
答案 2 :(得分:0)
这对我有用 -
for(i=0;i<numrow;i++){
String[] newArray=new String[numcol];
for (j=0;j<numcol;j++ ){
if(xlsh.getRow(i).getCell(j)!=null){
XSSFCell cellval=xlsh.getRow(i).getCell(j);
cellval.setCellType(Cell.CELL_TYPE_STRING);
newArray[j] = cellval.toString();
}
else{
newArray[j] = "";
}
}
xldata[i][0] = newArray;
}
return xldata;
答案 3 :(得分:0)
好吧,如果您仍在寻找答案,那么这就是解决方案: 首先不确定您的Excel数据电子表格是什么样的,但您的for循环应该说明这样......
for(i=0;i<numrow+1;i++){
for (j=0;j<numcol;j++ ){
if(xlsh.getRow(i).getCell(j)!=null){
xldata[I][j]=xlsh.getRow(i).getCell(j).getStringCellValue();
}
else{
xldata[i][j]="";
}
}
}
return xldata;
当你有xldata [I] [j]时,你需要从这个方法返回一个二维对象......比如&#34;返回xldata&#34;并且您的方法应该具有String [] []和返回类型。 例如:像这样的事情
public String[][] readExcelData(String filename, String sheetName, String tableName){
...
...
...
for(i=0;i<numrow+1;i++){
for (j=0;j<numcol;j++ ){
if(xlsh.getRow(i).getCell(j)!=null){
xldata[i][j]=xlsh.getRow(i).getCell(j).getStringCellValue();
}
else{
xldata[i][j]="";
}
}
}
return xldata;
}
您的测试方法也应该期望相同的行和列数据......这样的事情取决于您从电子表格中获得的数据,如果可能是2个参数或更多...
Ex:
@Test(dataProvider = "name")
public void test1(String row, String col){
..
}
尝试这样的实现并希望它有效!