@Disabled是JUnit 5中用于临时禁用测试方法或类的注解,标记为skipped且保留在报告中;可选原因说明,支持作用于@Test方法或整个测试类,但不可用于生命周期方法。

在 JUnit 5 中,@Disabled 是专门用来临时跳过某个测试方法或整个测试类的注解,它不会删除代码,也不会影响其他测试运行,只是让被标注的部分在执行时显示为 skipped(已跳过),并保留在测试报告中。
@Disabled 用在单个测试方法上
这是最常见用法:直接加在 @Test 方法上方(顺序不严格,但建议 @Test 在前)。
- 必须和
@Test同时存在,不能单独使用 - 可选填写原因字符串,比如功能未完成、环境不支持、临时绕过不稳定测试等
- IDE(如 IntelliJ 或 Eclipse)运行时会明确标灰,并显示 “skipped”
示例:
@Test
@Disabled("订单退款逻辑尚未开发完成")
void testRefundProcessing() {
// 不会执行
}@Disabled 用在整个测试类上
如果整套功能都还没 ready,比如新模块的测试类全部暂不运行,可以加在类声明处。
- 该类下所有
@Test方法都会被跳过 - 同样支持写原因,便于团队理解屏蔽背景
- 不影响其他测试类的执行
示例:
@Disabled("风控服务集成测试依赖外部系统,当前不可用")
class RiskServiceIntegrationTest {
@Test void testBlacklistCheck() { /* ... */ }
@Test void testScoreCalculation() { /* ... */ }
}注意事项和常见误区
这个注解看着简单,但几个关键点容易出错:
- 只适用于 JUnit 5(Jupiter),JUnit 4 里无效 —— 要用
@Ignore - 不能加在
@BeforeEach、@AfterAll等生命周期方法上,Jupiter 不支持 - 被禁用的测试仍会被扫描、编译、计入测试总数,只是状态变成 SKIPPED
- Maven Surefire 插件会在控制台输出 skipped 计数,CI 流水线也能识别
怎么确认 @Disabled 生效了?
运行测试后观察几个地方:
- IDE 测试面板中对应条目变灰,显示 “skipped” 或图标带斜杠
- Maven 命令行输出里会有类似
Tests run: 12, Failures: 0, Errors: 0, Skipped: 2 - 生成的测试报告(如 Surefire 的 XML 或 HTML)中会单独列出 skipped 的项及原因


















