这是我的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 数据提供程序的数据,但出现方法不匹配错误。
这不是 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 个字符串: userValue 和 userPassword
但是您的 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());
}