当前位置: 首页 > news >正文

`@Disabled` 注解未生效的原因分析与解决方案

@Disabled 是 JUnit 5 中用于跳过测试的注解,如果它没有生效,通常是由于以下原因造成的:

常见原因及解决方案

1. 导入错误的注解包(最常见问题)

  • JUnit 4 使用 @Ignore
  • JUnit 5 使用 @Disabled
// 错误 ❌ (JUnit 4)
import org.junit.Ignore;// 正确 ✅ (JUnit 5)
import org.junit.jupiter.api.Disabled;@Disabled("跳过原因说明") // 正确使用JUnit 5注解
public class MyTest {// ...
}

2. 缺少 JUnit Jupiter 依赖

确保 pom.xmlbuild.gradle 中有正确的依赖:

Maven 配置:

<dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.10.0</version> <!-- 使用最新版本 --><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.10.0</version><scope>test</scope></dependency>
</dependencies>

Gradle 配置:

dependencies {testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.0'testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
}

3. 测试引擎冲突

如果同时存在 JUnit 4 和 JUnit 5 依赖,添加以下配置:

Maven:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version><configuration><dependenciesToScan><dependency>junit-jupiter</dependency></dependenciesToScan></configuration></plugin></plugins>
</build>

Gradle:

test {useJUnitPlatform()
}

4. IDE 配置问题

  1. 清除缓存

    • IntelliJ: File > Invalidate Caches / Restart...
    • Eclipse: Project > Clean
  2. 检查运行配置

    • 确保使用 JUnit 5 运行测试
    • 不要使用旧版 JUnit 4 运行器

5. 注解位置错误

@Disabled 可以放在类或方法上:

// 禁用整个测试类
@Disabled
class DisabledClassTest {// 所有测试方法都会被跳过
}class PartialDisabledTest {// 禁用单个测试方法@Disabled@Testvoid skippedTest() { /* ... */ }@Testvoid activeTest() { /* ... */ }
}

6. 使用条件注解冲突

如果同时使用条件执行注解(如 @EnabledOnOs),优先级可能导致 @Disabled 被覆盖:

// ❌ 错误示例:条件注解会覆盖@Disabled
@Disabled
@EnabledOnOs(OS.MAC)
void testWithConflict() { /* ... */ }// ✅ 正确做法:只使用一个禁用机制
@Disabled
// @EnabledOnOs(OS.MAC) // 移除条件注解
void testWithoutConflict() { /* ... */ }

验证解决方案的测试示例

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.assertTrue;public class DisabledTestExample {@Test@Disabled("这个测试应该被跳过")void shouldBeSkipped() {System.out.println("这个测试不应该执行!");assertTrue(false);}@Testvoid shouldRun() {System.out.println("这个测试应该正常执行");assertTrue(true);}
}

检查清单:当 @Disabled 不生效时

  1. 确认导入:import org.junit.jupiter.api.Disabled;
  2. 检查依赖:确保 JUnit Jupiter 5.x 在依赖树中
  3. 运行命令:mvn dependency:tree | grep junit
  4. 验证 IDE:使用最新版 IntelliJ/Eclipse 并清除缓存
  5. 检查构建工具配置:
    • Maven: 确认 maven-surefire-plugin 版本 ≥ 2.22.0
    • Gradle: 确认 useJUnitPlatform()
  6. 尝试简单测试:创建一个仅含 @Disabled 测试的最小示例

如果所有步骤都正确,但问题仍然存在,可能是 IDE 插件冲突或项目配置问题,建议创建一个新的最小化项目进行测试。

http://www.dtcms.com/a/290811.html

相关文章:

  • 【PHP安全】免费解密支持:zend52、zend53、zend54好工具
  • 精密深孔偏心检具的制作及光学深孔检测探究 —— 激光频率梳 3D 轮廓检测
  • DevCon 6记录
  • GeoPandas 进行真正的地理空间可视化
  • ssh2-sftp-client 简化 sftp 文件传输的 node库
  • 轮状太空城的科学依据浅谈
  • 渗透测试视角:Web 应用常见漏洞的利用与防御策略
  • Unity-NavMesh详解-其二
  • 牛客周赛 Round 101
  • 职坐标:嵌入式AI项目指南
  • MySQL 核心知识点梳理(1)
  • JVM 类加载过程笔记
  • 二维DP深度解析
  • Linux(Centos 7.6)命令详解:jobs
  • 服务器后台崩溃的原因
  • openpnp - 贴片前,矫正板子位置时,使用多个mark点的位置并不一定精确(mark点可能板厂做的位置就不准)
  • 小智ai MCP学习笔记
  • 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)解题报告 | 珂学家
  • SOLIDWORK教育版实时协作打破空间限制
  • 组合设计模式
  • 笔试——Day14
  • tcp的三次握手与四次挥手
  • 手机录制视频时,硬编码和软编码哪个质量高?(硬件编码、软件编码)
  • 跨端分栏布局:从手机到Pad的优雅切换
  • 删除 XML 格式中双引号内的空格
  • odoo-059 xml中字段上写 domain 和 filter_domain 什么区别
  • 对理性决策模型的剖析及应用路径
  • vue2使用v-viewer图片预览:打开页面自动预览,禁止关闭预览,解决在微信浏览器的页面点击事件老是触发预览初始化的问题
  • OpenEuler 22.03 系统上安装配置gitlab runner
  • Linux网络编程-osi、udp