You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@DataProvider返回Iterator<Object[]>时测试无输出无报错问题

问题原因

  1. 核心错误:你构造的测试数据集List<Object[]> obj在创建后,从未将构造好的obj1、obj2两个参数组加入集合,最终返回的Iterator是空集合的迭代器,没有可用的测试参数用于执行测试逻辑,所以控制台没有业务输出。
  2. 认知误区:TestNG的@DataProvider本身支持返回Iterator<Object[]>类型,返回类型本身不是问题原因。
  3. 代码笔误:给obj2赋值时误写为修改obj1的第二个元素,obj2[1]始终未赋值,后续修复后运行会触发空指针异常。
  4. 参数结构不匹配:@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 03:06:04