java - TestNG:在 Eclipse 的 DataProvider 中返回 Iterator 时出现 ClassCastException
问题描述
在我的 TestNG 测试中,我使用了一个返回 Iterator 对象的 DataProvider,但是当我运行测试时,我得到了一个错误。有人可以解释为什么这是错误的,我应该怎么做才能解决它?
日食版本:
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.3a Release (4.7.3a)
Build id: 20180405-1200
Java版
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
数据提供者
@DataProvider(name = "SmokeTestData", parallel = true)
public Iterator<SmokeTestData> smokeTestData(ITestContext context) {
String fileName = context.getCurrentXmlTest().getParameter("filename");
int numberOfTests = SmokeTestData.getNumberOfTests(fileName, true);
SmokeTestData[] testSuiteData = new SmokeTestData[numberOfTests];
for (int i = 1; i <= numberOfTests; i++) {
testSuiteData[i-1] = new SmokeTestData(fileName, i);
}
return (Stream.of(testSuiteData)).iterator();
}
测试
@Test(description = "Smoke Test", dataProvider = "SmokeTestData", groups =
{"SmokeTest"})
@Description("Smoke Test")
@Severity(SeverityLevel.NORMAL)
public void smokeTest(SmokeTestData smokeTestData) {
selectEnv(smokeTestData.getUrl());
loginPage.get().smoketest(smokeTestData.getEnvironment(), smokeTestData.getEmail(), smokeTestData.getPassword());
serviceAvailabilityPage.get().smoketest();
referralRequestStatusPage.get().smoketest();
}
数据
Environment,Url,Email,Password
DE,https://somedomain.com/index.php/login,user@somedomain.com,somePW!1
IN,https://somedomain.com/index.php/login,user@somedomain.com,somePW!1
NM,https://somedomain.com/index.php/login,user@somedomain.com,somePW!1
MI,https://somedomain.com/index.php/login,user@somedomain.com,somePW!1
NV,https://somedomain.com/index.php/login,user@somedomain.com,somePW!1
AK,https://somedomain.com/index.php/login,user@somedomain.com,somePW!1
错误:
java.lang.ClassCastException: data.SmokeTestData cannot be cast to java.base/[Ljava.lang.Object;
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1102)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:844)
感谢您提前提供任何帮助!
解决方案
我通过完全卸载包括以下文件夹和清空垃圾箱的 Eclipse 解决了这个问题。
- ~/.eclipse
- ~/Library/Caches/org.eclipse.platform.ide
- ~/Library/Saved Application State/org.eclipse.platform.ide.savedState
- ~/Library/Preferences/org.eclipse.platform.ide.plist
然后安装 Eclipse IDE for Java Developers 版本 2018-09 和 TestNG 插件。
推荐阅读
- javascript - 如何在 React 应用程序中覆盖或取消容器的 CSS 填充
- c - c链表追加插入
- html - css 如何使链接的背景表现得像链接本身?
- javascript - 具有均匀面的程序圆网格
- c# - 导出带有图像和文件的 WindowsForm
- python - 硒 python 网页抓取
- java - 上滑面板 android 构建失败
- tensorflow - keras层输入大小中问号(?)的含义
- java - 如何在没有并发修改异常的情况下进行连续循环收集
- flutter - 错误:[dart] 参数类型“Context”不能分配给参数类型“BuildContext”。[argument_type_not_assignable]