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

TestNG重试时DataProvider未传递新对象参数的问题

TestNG重试时DataProvider传递对象被复用的问题解决

这个问题的核心原因是TestNG的@DataProvider默认启用了参数复用(reuseParameters属性默认值为true),即使重试时DataProvider方法被执行,测试方法仍然会复用第一次运行时的参数对象,导致之前修改的属性被保留。

解决方案

在@DataProvider注解中添加reuseParameters = false,强制TestNG在每次测试(包括重试)时都使用DataProvider新创建的对象实例:

@DataProvider(name = "userData", reuseParameters = false)
public static Object[] getUserData() {
    System.out.println("DataProvider is started...");
    TestUser testUser = new TestUser("John");
    System.out.println("Username from dataprovider: " + testUser.getName());
    return new Object[]{testUser};
}

原理说明

reuseParameters = false会禁用TestNG对DataProvider参数的缓存机制,每次执行测试(包括重试流程)都会重新调用DataProvider方法并使用其返回的全新参数对象,彻底避免旧对象属性修改对重试的影响。

修改后重试时的输出会恢复正常:

DataProvider is started...
Username from dataprovider: John
Test is started...
Username from test: John

Retry test...

DataProvider is started...
Username from dataprovider: John
Test is started...
Username from test: John

内容的提问来源于stack exchange,提问作者FinitaLaComedia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:45:22