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

Java 如何只测试某个类或方法:Maven与IntelliJ IDEA的不同方法及注意事项

1. 使用 Maven 只测试某一个类或方法

(1) 测试一个类

Maven 提供了通过命令行运行特定测试类的能力:

mvn -Dtest=ClassName test

示例:

mvn -Dtest=fileIOTest test

这将只运行 fileIOTest 类的所有测试方法。


(2) 测试一个具体方法

如果只想运行某一个类中的特定测试方法,可以指定类名和方法名:

mvn -Dtest=ClassName#methodName test

示例:

mvn -Dtest=fileIOTest#testStorageFolderCreation test

这将运行 fileIOTest 类中名为 testStorageFolderCreation 的方法。


(3) 注意事项
  1. 类名与方法名的大小写敏感

    • 确保类名和方法名与代码中的定义完全一致(包括大小写)。
    • fileIOTestFileIOTest 是不同的类。
  2. Maven 的工作目录

    • 默认情况下,Maven 的工作目录是项目的根目录(例如 F:/course/0086_JAVA/cw-db)。
    • 文件路径、依赖的资源路径都是相对于项目根目录的。
  3. 测试类的包路径

    • 确保测试类的包路径和文件路径一致。例如,fileIOTest 类应位于 src/test/java/edu/uob 目录,且声明包为:
      package edu.uob;
      
  4. 依赖配置

    • 检查 pom.xml 是否正确配置了 JUnit 依赖:
      <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter</artifactId>
          <version>5.9.3</version>
          <scope>test</scope>
      </dependency>
      
    • 如果缺失,运行命令可能会失败。

2. 使用 IntelliJ IDEA 只测试某一个类或方法

(1) 右键运行单个测试类或方法
  • 打开测试类 fileIOTest,右键点击文件的编辑区域。
  • 选择:
    • “Run 'fileIOTest'” 运行该类的所有测试。
    • 或右键具体测试方法,选择“Run 'testStorageFolderCreation'”。

适用场景:

  • 适用于快速测试单个类或方法。
  • IDEA 会自动检测项目的测试框架(如 JUnit),无需手动配置。

(2) 编辑单独的运行配置
  • 在 IDEA 中创建一个针对单个测试类或方法的运行配置:
    1. 点击右上角的运行配置下拉框,选择“Edit Configurations”。
    2. 点击左上角的 + 图标,选择 JUnit
    3. 填写以下内容:
      • :填写目标测试类的完全限定名,例如 edu.uob.fileIOTest
      • 方法(可选):指定某个方法名,例如 testStorageFolderCreation
      • 工作目录:设置为项目根目录,例如:
        F:/course/0086_JAVA/cw-db
        
    4. 保存后运行配置。

优点:

  • 支持自定义运行参数(如环境变量或 VM 参数)。
  • 适合需要反复运行某一类或某一方法的场景。

(3) 不编辑配置的默认行为
  • 如果你不单独配置运行文件,IDEA 会自动检测测试框架(如 JUnit)。
  • 当你右键运行某个测试类或方法时,IDEA 使用默认的 JUnit 配置运行测试。

注意:

  • IDEA 默认使用 项目根目录 作为工作目录。如果路径问题导致测试失败,需手动调整运行配置中的工作目录。

3. IDEA 与 Maven 的行为比较

特性MavenIntelliJ IDEA
运行方式使用命令行,需指定类名或方法名。GUI 界面右键运行或配置运行选项。
依赖工作目录默认项目根目录,基于此解析相对路径。默认项目根目录,但可在运行配置中自定义。
运行速度相对较慢(会加载所有依赖,执行完整的测试流程)。相对较快(只运行当前选中的测试类或方法)。
配置灵活性灵活度低,主要通过命令行参数指定。高度灵活,可通过 GUI 界面配置运行参数。
错误信息展示命令行输出,较难直观调试。提供调试工具,可逐步跟踪代码。
适用场景提交前验证代码在标准化环境下运行。开发和调试阶段快速测试和验证代码。

4. 配置中的注意事项

(1) 工作目录
  • Maven:工作目录始终是项目的根目录。
  • IDEA:默认也是项目根目录,但如果运行失败(找不到资源文件等),需要检查并手动设置工作目录。
(2) 路径一致性
  • 确保测试类的路径与包声明一致,例如:
    • 测试类 fileIOTest.java 应位于 src/test/java/edu/uob
    • 包声明应为:
      package edu.uob;
      
(3) 测试依赖
  • 无论是 IDEA 还是 Maven,都需要正确配置 JUnit 依赖。
(4) IntelliJ IDEA 的目录标记
  • 确保将 src/test/java 标记为“测试源码根目录”(Test Sources Root),这样 IDEA 可以正确识别测试类。

测试覆盖的问题

  • 测试并不会自动验证主代码的完整性。如果测试未覆盖某些错误场景,可能导致测试通过但代码仍有缺陷。
  • 为了提高测试的有效性:
    • 确保编写足够的单元测试覆盖所有逻辑分支。
    • 使用覆盖率工具验证测试覆盖率。
    • 执行边界条件和异常处理测试。
Maven 和测试流程的关系
  1. 测试时会自动编译
    • 执行 mvn test,Maven 会自动完成 compiletest-compile
  2. 单独编译
    • 如果只关心编译是否通过,而不运行测试,可以单独执行 compiletest-compile

4. 总结与推荐实践

任务推荐命令说明
验证主代码是否能编译通过mvn compile只编译 src/main/java 的主代码。
验证测试代码是否能编译通过mvn test-compile只编译 src/test/java 的测试代码。
执行单元测试mvn test自动编译主代码和测试代码,并运行测试。
测试单个类mvn -Dtest=ClassName test运行特定测试类(例如 fileIOTest)。
测试单个方法mvn -Dtest=ClassName#methodName test运行测试类中指定的方法(例如 fileIOTest#testStorageFolderCreation)。
分析代码覆盖率使用 JaCoCo 或 IntelliJ IDEA 的覆盖率工具确保测试覆盖了所有的逻辑分支和错误处理路径。
最佳实践
  1. 开发阶段
    • 使用 IntelliJ IDEA 调试和运行测试。
    • 借助覆盖率工具,确保测试覆盖主代码的所有逻辑分支。
  2. 提交前
    • 使用 Maven 验证代码在标准环境下能编译通过并运行测试。
    • 执行覆盖率报告,确保逻辑分支都被覆盖。

IDEA中必须 右键“将目录标记为” 

(1) 必须的场景

标记目录为 源码根目录 测试源码根目录 资源根目录 是在Maven 项目中必须的:

  1. 如果不标记,可能导致:

    • IDEA 无法区分生产代码和测试代码,运行时可能出现编译错误。 IDEA 会认为所有文件都是普通代码而非测试代码。
    • 特别注意:Maven 和 Gradle 默认依赖目录标记来解析构建,因此在 Maven 项目中,标记目录几乎是必须的
    • 如果有资源文件(如配置文件、数据文件等)存储在 src/main/resourcessrc/test/resources 中,不标记资源目录可能导致:IDEA 无法将资源文件加入到运行时路径中,导致程序运行时找不到资源。
  2. 源代码目录:src/main/java

    为什么放在 src/main/java 而不是具体到 edu/uobsrc/main/java 是 Maven 和 IntelliJ IDEA 默认的生产代码根目录,所有的生产代码都应存放在这个目录中。edu.uob 是包名,它应该是 src/main/java 下面的子目录。
     
  3. 标记后:生产代码目录和资源目录通常为蓝色,测试代码目录和测试资源目录通常为绿色

http://www.kler.cn/a/504945.html

相关文章:

  • Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南
  • 二手车交易系统的设计与实现(代码+数据库+LW)
  • Vue如何构建项目
  • QT在 MacOS X上,如何检测点击程序坞中的Dock图标
  • CMD批处理命令入门(5)——ping,ipconfig,arp,start,shutdown,taskkill
  • Three.js 性能优化:打造流畅高效的3D应用
  • iOS - TLS(线程本地存储)
  • 40,【5】CTFHUB WEB SQL 时间盲注
  • 跨境電商防關聯指紋流覽器Linken Sphere使用教程
  • vscode配置opencv4.8环境
  • Open FPV VTX开源之嵌入式OSD配置
  • extends配置项详解
  • 深度学习中的模块复用原则(定义一次还是多次)
  • C语言数据结构编程练习-用指针创建顺序表,进行创销和增删改查操作
  • 屏幕轻触间:触摸交互从 “感知” 到 “智算” 的隐秘路径
  • 爬虫案例:python爬取京东商品数据||京东商品详情SKU价格
  • OpenSeaOtter使用手册-项目简介
  • # MyBatis 基础了解
  • camera 配置预览和拍照streams上报的可用尺寸列表
  • DevOps实用场景:在哪些业务中应用DevOps最有效
  • selenium操作指南,2万字总结
  • 【力扣Hot100】双指针
  • Linux磁盘存储与内存管理命令
  • 【C++学习篇】红黑树 从入门到进阶
  • Vue 开发者的 React 实战指南:表单处理篇
  • 微信小程序:跨页面数据修改全攻略