在 java 单元测试中,使用 @disabled 注解可以跳过指定测试方法或整个测试类的执行。只需将该注解直接添加在 @test 方法或类定义上方即可生效,被标记的测试用例将不会被 junit 5 运行器发现并执行,从而避免失败或耗时操作干扰测试结果。

如何跳过单个测试方法
直接在目标测试方法上方添加 @Disabled 注解即可跳过该特定方法的执行。这适用于临时禁用某个因依赖缺失、Bug 未修复或环境限制而无法通过的测试用例。JUnit 5 会识别此注解并完全忽略该方法,不会生成任何报告条目(除非配置了显示被禁用的测试)。

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Disabled;
public class CalculatorTest {
@Test
public void testAdd() {
// 正常执行的测试
}
@Disabled("暂时跳过,因为除法逻辑尚未实现")
@Test
public void testDivideByZero() {
// 此测试将被跳过
}
}
上述代码中,testAdd 会正常运行,而 testDivideByZero 会被跳过。注解中的字符串参数是可选的,用于说明跳过原因,便于后续维护时理解上下文。
如何跳过整个测试类
将 @Disabled 注解放置在测试类声明之前,可跳过该类中所有测试方法的执行。这在整组功能模块尚未就绪、或需要整体排除某类测试场景时非常有用。类级别禁用后,该类内所有 @Test 方法均不会运行,即使个别方法单独添加了其他生命周期注解也不会改变这一行为。

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Disabled;
@Disabled("整个支付模块测试暂不启用")
public class PaymentServiceTest {
@Test
public void testProcessPayment() {
// 此测试将被跳过
}
@Test
public void testRefund() {
// 此测试也将被跳过
}
}
类级别禁用比逐个方法禁用更高效,尤其适用于大型测试套件中整块功能被冻结的情况。注意:若子类继承了父类且父类被禁用,子类默认也会继承禁用状态,除非子类显式移除该注解(但通常不建议这样做,应保持语义一致)。
被跳过的测试在报告中如何体现
当测试被 @Disabled 跳过时,标准 JUnit 5 报告通常不会将其列为“失败”或“错误”,而是完全省略或标记为“已禁用”。具体表现取决于使用的测试运行器和报告插件。例如,Maven Surefire 插件默认会在控制台输出中提示“Tests run: X, Failures: 0, Errors: 0, Skipped: 0”,其中“Skipped”不包含被 @Disabled 跳过的测试;但若启用详细日志或使用 IDE 内置测试视图,通常会明确标注“Disabled”状态。开发者可通过查看测试摘要确认哪些用例未被执行,避免因误以为测试通过而掩盖潜在问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











