2012-08-02 71 views
1

錯誤號出現這樣的錯誤:JUNIT參數錯誤:我正在使用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); 
} 

我不知道什麼是錯的。

感謝您的幫助

回答

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] 

電子表格中的每個新行會添加一個新的陣列有兩個元素結果列表。

+0

感謝您的幫助。我改變了那個錯誤,但問題仍然是一樣的,出現錯誤的參數數量 – MrGreen 2012-08-02 10:31:37

+2

你的單元測試類必須有一個公共構造函數,它的參數個數與你Excel表中的列的數量相同(也就是說, 'spreadsheetData()'方法) – 2012-08-02 12:01:08

+0

謝謝。最後,我傳遞如下格式的數據: return Arrays.asList(new Object [] [] {{new Object [] {data1,data2}},{new Object [] {data1,data2}}}); – MrGreen 2012-08-02 15:27:38