JUnit 5 测试失败主因是依赖缺失或配置错误:需正确添加 junit-jupiter 依赖并设 scope 为 test,确保测试类在 src/test/java 下、以 Test 结尾、方法 public void 无参且用 @Test 标注,断言参数顺序勿颠倒。

IntelliJ IDEA 里跑 JUnit 测试,根本不需要手动配 JRE、写 main 方法或折腾 classpath —— 只要依赖正确、类路径清晰、注解用对,点一下就能跑通。关键不是“怎么启动”,而是“为什么点不动”或“为什么报错”。
JUnit 5 依赖没加对,Test 注解标红或无法导入
这是最常见卡点:IDE 显示 @Test 报红,或者运行时提示 java.lang.NoClassDefFoundError: org/junit/jupiter/api/Test。
- 确认你用的是 JUnit 5(不是 JUnit 4),Maven 项目必须在
pom.xml中声明org.junit.jupiter:junit-jupiter,且<scope>test</scope>不可省略 - Gradle 项目对应写法是:
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'(版本号建议用最新稳定版) - 添加完依赖后,必须点击 Maven 工具窗口的
Reload project图标(或按Ctrl+Shift+O),否则 IDE 不会识别新类 - 不要混用
org.junit.Test(JUnit 4)和org.junit.jupiter.api.Test(JUnit 5)—— 导包错了就直接失效
右键 Run ‘XXXTest’ 没反应,或提示 “No tests found”
不是代码问题,而是测试类/方法没被 IDE 识别为可执行测试目标。
- 确保测试类名以
Test结尾(如CalculatorTest),且放在src/test/java目录下(不是src/main/java) - 测试方法必须是
public void无参,且用@Test标注(JUnit 5 不再支持public static void或带参数的方法) - 如果用了
@DisplayName,不影响运行;但若用了@Disabled或@Tag却没配置过滤器,可能被静默跳过 - 检查项目结构:右键
src/test/java→Mark Directory as → Test Sources Root(目录图标应变成绿色)
测试能跑但断言失败,assertEquals 报错信息看不懂
JUnit 5 的断言失败默认只显示「期望值 vs 实际值」,不带上下文,容易误判。
-
assertEquals(expected, actual)参数顺序不能反 —— 第一个参数是期望值,第二个才是实际返回值 - 浮点数比较别用
assertEquals(double, double),改用assertEquals(expected, actual, delta),比如assertEquals(3.14, calc.pi(), 0.001) - 对象比较慎用
assertEquals,除非类重写了equals();否则默认比引用,永远失败 - 想看更清楚的失败输出,可在
@Test后加参数:@Test<br>void testAdd() { assertEquals(5, add(2, 3), "2 + 3 should be 5"); }
测试通过了,但覆盖率低或逻辑没覆盖全
跑通 ≠ 覆盖到位。IDEA 自带覆盖率插件,但默认不开启,且容易忽略边界条件。
- 运行测试时右键选择
Run ‘XXXTest’ with Coverage(不是普通 Run),才能看到黄色/红色覆盖标记 - 空集合、
null输入、负数、除零等边界场景,必须单独写测试方法,不能靠“顺手测一下” - 避免在测试里写
System.out.println或修改外部状态(如文件、数据库)—— 这会让测试不可重复、难调试 - 如果测试类用了
@BeforeEach,注意它每次都会新建实例;而@BeforeAll是静态的,共享状态需谨慎
真正麻烦的从来不是“怎么点运行”,而是测试类路径错位、依赖 scope 写成 compile、断言参数顺序颠倒这些细节 —— 它们不会报编译错误,但会让你花二十分钟怀疑人生。


















