如何在Eclipse中以TestNG运行文件 解决选项灰化、导入重复报错
Eclipse TestNG运行入口缺失、依赖重复问题解决
「Run as无TestNG选项、显示无适用项」修复
这个问题本质是IDE层面没有识别到TestNG运行环境,单独往项目里丢TestNG jar包解决不了——TestNG的运行入口是Eclipse插件提供的能力,单独导入jar只能让代码编译时识别到TestNG的注解和类,不会给IDE新增运行配置项:
- 先安装Eclipse官方TestNG插件:打开Eclipse Marketplace,搜索TestNG安装对应版本,安装完成后重启Eclipse。
- 如果插件已经安装还是识别不到,右键项目打开
Properties配置页,找到TestNG配置项,勾选Enable TestNG for this project;再进入Java Build Path的Libraries标签页,检查是否已经添加TestNG依赖库,没有的话点击Add Library选择TestNG库添加即可。 - 额外校验:测试类和
@Test标注的方法不要写abstract修饰,必须是public的实例方法,你提供的测试代码这块写法符合要求,不需要调整。
「Assert.assertEquals重复导入」修复
这个错误是手动导入零散TestNG jar包导致的依赖冲突:你手动添加的TestNG jar,和插件自动关联的TestNG库、RestAssured传递引入的TestNG包版本不一致,构建路径下存在多份全限定名相同的org.testng.Assert类,IDE无法确定要引用哪一份。
处理流程:
- 先把之前手动添加到项目构建路径里的所有TestNG相关独立jar包全部移除
- 普通Java项目直接通过
Add Library添加TestNG插件自带的统一依赖库即可,不要零散导入单独jar包 - 如果是Maven/Gradle项目,直接在构建配置文件中引入对应版本的TestNG测试依赖即可,构建工具会自动处理依赖传递,不会出现重复类问题。
提供的测试代码参考
import org.testng.Assert; import org.testng.annotations.Test; import files.Payload; import io.restassured.path.json.JsonPath; public class sumValidation { @Test public void sumOfCourses() { int sum = 0; JsonPath js = new JsonPath(Payload.CoursePrice()); int courseSize = js.getInt("courses.size()"); for(int i = 0; i < courseSize; i++) { int prices = js.getInt("courses.price[" + i + "]"); int copies = js.getInt("courses.copies[" + i + "]"); int amount = prices * copies; System.out.println(amount); sum = sum + amount; } // 原代码把断言写在循环内,循环过程中sum未累加完成会导致断言失败,挪到循环外逻辑才正确 int purchaseAmount = js.getInt("dashboard.purchaseAmount"); Assert.assertEquals(sum, purchaseAmount); } }
注:原代码中
purchaseAmount变量的获取和断言逻辑写在了for循环内部,循环执行时sum是逐次累加的状态,只有最后一轮循环sum才会等于总支付金额,前面的循环都会触发断言失败,上面的代码已经把这部分逻辑调整到循环外。
内容的提问来源于stack exchange,提问作者FilipC93
相关产品推荐
相关产品推荐

