1

我正在使用 JUnit 参数化测试并出现此错误:

java.lang.IllegalArgumentException:参数数量错误

这是代码:

测试:

@Parameters
public static Collection<Object[]> spreadsheetData() throws IOException {
    InputStream file = new FileInputStream("c:\\Path\\to\\file\\jeje.xls"); 
    return Utils.loadFromExcel(file);
}

方法:

public static Collection<Object[]> loadFromExcel(final InputStream excelFile)
throws IOException {
    HSSFWorkbook workbook = new HSSFWorkbook(excelFile);

    Sheet sheet = workbook.getSheetAt(0);

    // Number of columns
    int numberOfColumns = countNonEmptyColumns(sheet);
    int rows=0;

    // Number of rows
    for (Row row : sheet) {
        rows++;
    }

    Object[][] datos = new Object[numberOfColumns][rows];

    for (int row = 0; row<rows; row++) {
            for (int column = 0; column < numberOfColumns; column++) {
                Cell cell = sheet.getRow(row).getCell(column);
                datos[column][row] = cell.getRichStringCellValue();
            }   
    }

    return Arrays.asList(datos);
}

我不知道怎么了。

感谢您的帮助

4

1 回答 1

1

我假设电子表格中的每一行都是一个测试数据集,每一列都是你的测试的一个参数。如果是这种情况,您需要将数组声明更改为Object[][] datos = new Object[rows][numberOfColumns];并相应地填充数组。

例子

鉴于此电子表格...

a    b
c    d
e    f
g    h

...您当前的实现loadFromExcel()将返回下面的集合。电子表格中的新行将为结果列表中的每个数组添加一个新元素,但结果列表的大小将保持不变。

[a, c, e, g]
[b, d, f, h]

我假设,该方法应该返回如下内容:

[a, b]
[c, d]
[e, f]
[g, h]

电子表格中的每个新行都会将一个包含两个元素的新数组添加到结果列表中。

于 2012-08-02T09:35:40.310 回答