Selenium+TestNG+Java出现Data Provider Mismatch报错如何解决
问题根因
TestNG要求@DataProvider返回的二维数组中,每一行的元素个数必须和对应测试方法的入参个数完全一致,出现该报错的核心原因就是二者数量不匹配。
解决方案
第一步:核对Excel表结构
你的测试方法signUpWithUnicode只需要1个String类型入参,要保证Excel符合以下要求:
- Sheet1仅保留1列数据,第0行(第一行)为表头,第1行及之后每行存一个要测试的Unicode值
- 除了表头之外至少保留1行测试数据,若Excel只有表头没有实际测试数据,
getLastRowNum()返回0,会返回空的二维数组触发匹配错误
第二步:优化Excel读取逻辑
你当前的代码是自动读取表头行的所有列数,一旦Excel有多余列就会导致参数不匹配,建议固定读取第一列,同时补全资源释放和空值处理逻辑:
import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadExcel { public String unicode; public String[][] readExcel() throws IOException { XSSFWorkbook excelObject = new XSSFWorkbook("./data/unicode1.xlsx"); XSSFSheet excelSheet = excelObject.getSheet("Sheet1"); int rows = excelSheet.getLastRowNum(); // 固定列数为1,匹配测试方法的1个入参 int columns = 1; String[][] data = new String [rows][columns]; for (int i = 1; i <= rows; i++) { XSSFRow row = excelSheet.getRow(i); // 仅读取第一列(索引0)的内容 XSSFCell cell = row.getCell(0); // 兼容空单元格场景,避免空指针 String cellValue = cell == null ? "" : cell.getStringCellValue(); data[i-1][0] = cellValue; } // 释放Excel文件资源,避免内存泄漏 excelObject.close(); return data; } }
第三步:其他可选排查
- 确认测试类导入的
@Test注解是org.testng.annotations.Test,不要误导入JUnit的Test注解 - 若你使用的TestNG 7.0.0存在参数匹配相关bug,可升级到7.5及以上的稳定版本验证
内容的提问来源于stack exchange,提问作者Afanasii Jones
相关产品推荐
相关产品推荐

