![](/img/trans.png)
[英]Data Provider Mismatch error in Selenium with TestNG and Java
[英]Data provider mismatch in Selenium with TestNG
我正在用 selenium 编写以下代码并显示以下错误,请告诉我问题出在哪里。
导入 org.testng.annotations.DataProvider; 导入 org.testng.annotations.Test;
public class testngexcel {
public static ExcelReader excel = null;
@Test(dataProvider = "newdata")
public void testData(String username, String password, Integer age) {
System.out.println(username + " - " + password + " - " + age);
}
@DataProvider(name = "newdata")
public static Object[][] getData() {
if (excel == null) {
excel = new ExcelReader("C:\\Users\\Anjali.Nautiyal\\Desktop\\selenium\\testngdata.xlsx");
}
String sheetName = "login";
int rows = excel.getRowCount(sheetName);
int cols = excel.getColumnCount(sheetName);
Object[][] data = new Object[rows - 1][cols];
for (int rowNum = 2; rowNum <= rows; rowNum++) {
for (int colNum = 0; colNum < cols; colNum++) {
data[rowNum - 2][colNum] = excel.getCellData(sheetName, colNum, rowNum);
}
}
return data;
错误:
失败:testData org.testng.internal.reflect.MethodMatcherException:数据提供者不匹配方法:testData([Parameter{index=0, type=java.lang.String, DeclarationAnnotations=[]}, Parameter{index=1, type=java .lang.String, DeclarationAnnotations=[]}, Parameter{index=2, type=java.lang.Integer, DeclarationAnnotations=[]}]) 参数:[(java.lang.String)anjali,(java.lang.String )pa,(java.lang.String)25.0] 在 org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:49) 在 org.testng.internal.Invoker.injectParameters(Invoker.java:1293) 在 org .testng.internal.Invoker.invokeTestMethods(Invoker.java:1187) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) at org.testng.TestRunner.privateRun(TestRunner.java:744) at org.testng.TestRunner.run(TestRunner.java:602) at org.testng.SuiteRunner.runTest(SuiteRunner.java:380) at org.testng.SuiteRunner .runSequent ially(SuiteRunner.java:375) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java) :52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1226) 在 org .testng.TestNG.runSuites(TestNG.java:1144) at org.testng.TestNG.run(TestNG.java:1115) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) at org.testng。 remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
我看到的唯一问题是,您正在从 excel 读取数据,因此所有值可能都在String
,除非您将其转换为Integer
。 但是,在您的测试中,您希望第三个参数age
为Integer
将类型更改为String
应该可以解决问题
@Test(dataProvider = "newdata")
public void testData(String username, String password, String age) {
System.out.println(username + " - " + password + " - " + age);
}
以下代码会引发相同的错误。
@DataProvider(name = "newdata")
public static Object[][] getData() {
return new Object[][]{
{"20"},
{"30"}
};
}
@Test(dataProvider = "newdata")
public void testData(Integer age) {
System.out.println(age);
}
我知道这个问题已经提供了解决方案,但是没有明确讨论为什么会发生异常以及异常意味着什么。 异常消息很长,甚至可能有点混乱。 让我们格式化异常消息并仔细阅读。
FAILED: testData org.testng.internal.reflect.MethodMatcherException:
Data provider mismatch Method: testData([
Parameter{index=0, type=java.lang.String, declaredAnnotations=[]},
Parameter{index=1, type=java.lang.String, declaredAnnotations=[]},
Parameter{index=2, type=java.lang.Integer, declaredAnnotations=[]}])
Arguments: [
(java.lang.String)user123,
(java.lang.String)password123,
(java.lang.String)25.0]
at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:49)...etc.
当数据提供者不“匹配”它映射到的测试方法时,就会发生MethodMatcherException
异常。 在这种情况下,发生不匹配是因为数据提供者提供的参数与测试方法的参数不匹配。
异常消息基本上是说测试方法“testData”需要参数(String、String、Integer),但数据提供者提供的参数是(String、String、String)。
因此,问题在于数据提供者,因为它给出了一个 String 到 Integer 的年龄。 数据提供者使用一些库来读取电子表格中的单元格。 这意味着库代码将单元格内容作为字符串返回。 因此,您需要将单元格数据转换为正确的 Java 类型,例如 Integer。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.