我在数据提供程序类中使用 lombok 构建器,但我遇到数据提供程序不匹配问题

问题描述 投票:0回答:1

这是我的Provider方法

@DataProvider(name = "loginDataSet")
    public static Object[][] loginSet() {
        return new Object[][]{
                {

                        String.valueOf(LoginProvider.builder()
                                .username(data.getUsername())
                                .password(data.getPassword())
                                .build())
                }
        };
    }

这是我的测试方法

@Test(dataProvider = "loginDataSet", dataProviderClass = LoginData.class)
    public void loginAxis(String userValue, String userPassword) {
        new UserLogin(userValue,userPassword);
}

出现以下异常

org.testng.internal.reflect.MethodMatcherException: 
[public void Login.AxisLogin.loginAxis(java.lang.String,java.lang.String)] has no parameters defined but was found to be using a data provider (either explicitly specified or inherited from class level annotation).
Data provider mismatch
Method: loginAxis([java.lang.String arg0, java.lang.String arg1])
Arguments: [(java.lang.String) LoginProvider(username=863331712, password=Test@123)]

请帮我解决问题

我尝试使用 Lombok 构建器调用 Selenium 数据提供程序的数据,但出现方法不匹配错误。

selenium-webdriver lombok builder dataprovider mismatch
1个回答
0
投票

这不是 Lombok 问题。

查看错误内容:

Data provider mismatch
Method: loginAxis([java.lang.String arg0, java.lang.String arg1])
Arguments: [(java.lang.String) LoginProvider(username=863331712, password=Test@123)]

因此您的 loginAxis 需要 2 个字符串: userValueuserPassword

但是您的 loginDataSet DataProvider 返回一个数组,其中包含您的 LoginProvider 实例的字符串表示形式。

结果,测试预期有 2 个字符串,但只收到了一个。

因此,您要么必须更改数据提供者(无论“数据”对象在您的情况下意味着什么):

  @DataProvider(name = "loginDataSet")
    public static Object[][] loginSet() {
        return new Object[][]{
                {
    
                        data.getUsername(),
                        data.getPassword()
                }
        };
    }

或者您需要将 Test 参数更改为 LoginProvider(当然还要从数据提供程序中删除 String.valueOf()):

@Test(dataProvider = "loginDataSet", dataProviderClass = LoginData.class)
public void loginAxis(LoginProvider loginProvider) {
    new UserLogin(loginProvider.getUsername(), loginProvider.getPassword());
}
© www.soinside.com 2019 - 2024. All rights reserved.