2012-08-02 72 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