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

在Selenium的TestNG Data Provider中使用Lombok Builder遇参数不匹配求助

解决TestNG Data Provider与Lombok Builder参数不匹配问题

问题根源

你的代码核心问题是Data Provider返回值与测试方法参数不匹配:

  • Data Provider返回的是单个字符串(LoginProvider实例调用toString()后的结果)
  • 测试方法loginAxis需要两个独立的String类型参数
    这种参数数量和类型的不匹配直接触发了MethodMatcherException。

解决方案

方案1:保持测试方法参数不变,调整Data Provider返回结构

直接从构建好的LoginProvider实例中提取用户名和密码,作为两个独立参数返回,匹配测试方法的需求:

@DataProvider(name = "loginDataSet")
public static Object[][] loginSet() {
    // 构建LoginProvider实例
    LoginProvider loginInfo = LoginProvider.builder()
            .username(data.getUsername())
            .password(data.getPassword())
            .build();
    // 返回包含两个String的二维数组
    return new Object[][]{
        {loginInfo.getUsername(), loginInfo.getPassword()}
    };
}

方案2:修改测试方法接收LoginProvider对象(更优雅)

既然用Lombok Builder封装了登录数据,直接让测试方法接收LoginProvider对象,避免参数拆分,更符合面向对象设计:

  1. 确保LoginProvider类配置正确的Lombok注解(需要@Builder和@Getter来构建和获取属性):
@Builder
@Getter
public class LoginProvider {
    private String username;
    private String password;
}
  1. 调整Data Provider返回LoginProvider实例:
@DataProvider(name = "loginDataSet")
public static Object[][] loginSet() {
    return new Object[][]{
        {LoginProvider.builder()
                .username(data.getUsername())
                .password(data.getPassword())
                .build()}
    };
}
  1. 修改测试方法参数为LoginProvider:
@Test(dataProvider = "loginDataSet", dataProviderClass = LoginData.class)
public void loginAxis(LoginProvider loginData) {
    new UserLogin(loginData.getUsername(), loginData.getPassword());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:28:25