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

Java中JUnit知识点

JUnit 是 Java 中最常用的单元测试框架,用于编写和运行可重复的测试。以下是 JUnit 的核心知识点整理:

1. JUnit 版本差异

  • JUnit 4:基于注解(如 @Test@Before),兼容 Java 5+
  • JUnit 5(Jupiter):是 JUnit 的新一代版本,包含三个子项目:
    • JUnit Platform:测试运行平台
    • JUnit Jupiter:新的编程模型和扩展模型
    • JUnit Vintage:兼容 JUnit 4 和 3

2. 核心注解

JUnit 4 常用注解
  • @Test:标记测试方法
  • @Before:每个测试方法执行前运行
  • @After:每个测试方法执行后运行
  • @BeforeClass:所有测试方法执行前运行(静态方法)
  • @AfterClass:所有测试方法执行后运行(静态方法)
  • @Ignore:忽略该测试方法
JUnit 5 新增注解
  • @Test:功能增强,无需声明异常
  • @BeforeEach:替代 JUnit 4 的 @Before
  • @AfterEach:替代 JUnit 4 的 @After
  • @BeforeAll:替代 JUnit 4 的 @BeforeClass
  • @AfterAll:替代 JUnit 4 的 @AfterClass
  • @Disabled:替代 @Ignore
  • @DisplayName:为测试类或方法设置可读性名称
  • @Nested:标记嵌套测试类
  • @Tag:为测试打标签,用于筛选执行
  • @ParameterizedTest:参数化测试(需配合参数源注解)

3. 断言(Assertions)

用于验证测试结果是否符合预期。

JUnit 4
  • 主要使用 org.junit.Assert 类的静态方法:
    assertEquals(expected, actual);  // 相等判断
    assertTrue(condition);           // 验证为真
    assertFalse(condition);          // 验证为假
    assertNull(object);              // 验证为 null
    assertNotNull(object);           // 验证不为 null
    assertSame(expected, actual);    // 验证引用相同
    
JUnit 5
  • 断言位于 org.junit.jupiter.api.Assertions
    • 功能类似,但支持 lambda 表达式延迟计算:
      assertEquals(expected, actual, () -> "自定义错误消息");
      
    • 新增 assertAll() 支持批量断言(所有断言都会执行):
      assertAll("用户信息",() -> assertEquals("Alice", user.getName()),() -> assertEquals(30, user.getAge())
      );
      

4. 测试执行顺序

  • JUnit 4:默认按方法名哈希排序,可通过 @FixMethodOrder 控制
  • JUnit 5:默认无序,可通过 @TestMethodOrder 配合 MethodOrderer 控制(如按名称、按注解顺序等)

5. 参数化测试

允许使用不同参数多次运行同一测试方法。

JUnit 5 实现

需配合参数源注解(如 @ValueSource@CsvSource 等):

@ParameterizedTest
@ValueSource(strings = {"apple", "banana", "cherry"})
void testStringLength(String fruit) {assertTrue(fruit.length() > 3);
}@ParameterizedTest
@CsvSource({"1, 2, 3", "4, 5, 9", "2, 3, 5"})
void testAdd(int a, int b, int expected) {assertEquals(expected, a + b);
}

6. 异常测试

验证方法是否抛出预期异常。

JUnit 4
@Test(expected = ArithmeticException.class)
public void testDivideByZero() {int result = 1 / 0;
}
JUnit 5
@Test
void testDivideByZero() {assertThrows(ArithmeticException.class, () -> {int result = 1 / 0;});
}

7. 超时测试

限制测试方法的执行时间。

JUnit 4
@Test(timeout = 1000)  // 毫秒
public void testLongRunningMethod() {// 执行耗时操作
}
JUnit 5
@Test
void testLongRunningMethod() {assertTimeout(Duration.ofSeconds(1), () -> {// 执行耗时操作});
}

8. 嵌套测试(JUnit 5)

通过 @Nested 注解创建嵌套测试类,增强测试结构的可读性:

class UserServiceTest {@Nestedclass WhenUserIsNew {@Testvoid shouldCreateUserSuccessfully() {// 测试逻辑}}@Nestedclass WhenUserExists {@Testvoid shouldThrowDuplicateException() {// 测试逻辑}}
}

9. 测试套件(Test Suite)

将多个测试类组合成一个套件执行。

JUnit 4
@RunWith(Suite.class)
@Suite.SuiteClasses({UserTest.class, OrderTest.class})
public class AllTests {}
JUnit 5
@Suite
@SelectClasses({UserTest.class, OrderTest.class})
public class AllTests {}

10. 扩展机制(JUnit 5)

通过 Extension 接口实现自定义扩展,如:

  • 测试前后的自定义逻辑
  • 参数注入
  • 异常处理等

11. 集成工具

  • 构建工具:Maven(通过 pom.xml)、Gradle 中配置 JUnit 依赖
  • IDE:IntelliJ IDEA、Eclipse 内置支持 JUnit 测试运行
  • CI/CD:可与 Jenkins、GitHub Actions 等集成,自动执行测试

掌握这些知识点可以帮助你编写规范、高效的单元测试,提升代码质量和可维护性。实际使用中,JUnit 5 因其更灵活的特性,推荐作为首选版本。

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

相关文章:

  • Qt表格组件封装与远程数据库连接:从数据展示到交互体验
  • 阿里云——应用交付与负载均衡
  • 用户体验设计 | 从UX到AX:人工智能如何重构交互范式?
  • 阿里云轻量应用服务器与ECS对比
  • 4步用代码拆解数学建模中的TOPSIS评价决策! ! !
  • 树的常见算法及Java实现
  • LeetCode算法日记 - Day 23: 外观数列、数青蛙
  • 欧洲数字化养殖平台 Herdwatch 借力 Iceberg + StarRocks 提升分析能力
  • 【Matplotlib学习】驾驭画布:Matplotlib 布局方式从入门到精通完全指南
  • 【RabbitWQ】基于 Java 实现轻量级消息队列(二)
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(一)
  • 【重学 MySQL】九十、Linux下MySQL的安装与卸载指南
  • 如何保证DDC楼宇自控系统与IBMS集成管理系统的稳定性和可靠性?
  • 深入解析 Flink Function
  • 【Datawhale之Happy-LLM】Encoder-only模型篇 task05精华~
  • 【雅思021】I’m sorry, I love you Ⅱ
  • 如何使用PyTorch搭建一个基础的神经网络并进行训练?
  • skywalking 原理
  • H20 性能表现之 gpt-oss-120b
  • 软考-系统架构设计师 管理信息系统(MIS)详细讲解
  • React内网开发代理配置详解
  • C++ 力扣 704.二分查找 基础二分查找 题解 每日一题
  • Https之(四)国密GMTLS
  • 【Redis#8】Redis 数据结构 -- Zset 类型
  • 改造thinkphp6的命令行工具和分批次导出大量数据
  • GTCB:引领金融革命,打造数字经济时代标杆
  • 【js】加密库sha.js 严重漏洞速查
  • UTXO 模型及扩展模型
  • 香港数字资产交易市场蓬勃发展,监管与创新并驾齐驱
  • 完整实验命令解析:从集群搭建到负载均衡配置(2)