@DataProvider返回Iterator<Object[]>时测试无输出无报错问题
问题原因
- 核心错误:你构造的测试数据集
List<Object[]> obj在创建后,从未将构造好的obj1、obj2两个参数组加入集合,最终返回的Iterator是空集合的迭代器,没有可用的测试参数用于执行测试逻辑,所以控制台没有业务输出。 - 认知误区:TestNG的
@DataProvider本身支持返回Iterator<Object[]>类型,返回类型本身不是问题原因。 - 代码笔误:给
obj2赋值时误写为修改obj1的第二个元素,obj2[1]始终未赋值,后续修复后运行会触发空指针异常。 - 参数结构不匹配:
@DataProvider返回的每个迭代项是长度为2的Object[],对应测试方法应该定义2个独立入参,而不是1个Object[]类型的入参,参数结构不匹配也会导致执行异常。
解决方案
按以下步骤修改代码即可正常运行:
- 在DataProvider方法中,将构造好的
obj1、obj2加入测试数据集集合 - 修正赋值笔误,给
obj2[1]正确赋值 - 调整测试方法的参数列表,和DataProvider返回的参数结构匹配
修改后的完整代码如下:
import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Practice { @Test(dataProvider = "NotWorking") public void testCase(String val1, String val2) { System.out.println(val1); System.out.println(val2); } @DataProvider(name = "NotWorking") public Iterator<Object[]> dataProvider2() { List<Object[]> obj = new ArrayList<>(); Object[] obj1 = new Object[2]; obj1[0] = "First_Object_First_value"; obj1[1] = "First_Object_Second_value"; Object[] obj2 = new Object[2]; obj2[0] = "Second_Object_First_value"; obj2[1] = "Second_Object_Second_value"; // 把构造好的参数组加入集合 obj.add(obj1); obj.add(obj2); return obj.iterator(); } }
修改后运行会正常输出2组测试数据,测试运行数显示为2。
内容的提问来源于stack exchange,提问作者ankush pawar
相关产品推荐
相关产品推荐

