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]

スプレッドシートの新しい行ごとに、2 つの要素を持つ新しい配列が結果リストに追加されます。

于 2012-08-02T09:35:40.310 に答える