JUnit4/JUnit5 注解
Created|Updated
|Word Count:99|Reading Time:1mins|Post Views:
| junit4 | junit5 | 特点 |
|---|---|---|
| @BeforeClass | @BeforeAll | 在当前类的所有测试方法之前执行。注解在【静态方法】上。 |
| @AfterClass | @AfterAll | 在当前类中的所有测试方法之后执行。注解在【静态方法】上。 |
| @Before | @BeforeEach | 在每个测试方法之前执行。注解在【非静态方法】上。 |
| @After | @AfterEach | 在每个测试方法之后执行。注解在【非静态方法】上。 |
Author: magicliang
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2020-03-23
Optional 的正确用法
Optional 的不正确实践 首先,不要直接拿来做if-else的判定条件,这肯定是错的: 123456Optional<User> user = ...... if (user.isPresent()) { return user.getOrders();} else { return Collections.emptyList();} 而且get()要配合isPresent()才安全。 其次,尽量不要用 Optional 拿来做成员变量,特别是 pojo 的成员变量,这很容易让读 pojo 的框架出问题。 再次,不要拿来做方法参数,因为很可能写成 if (user.isPresent()) {}式的代码。 最后,Optional 的关注点在它的 value 的后续处理身上,如果这个 value 只是一个 flag,还是要乖乖地用if-else;如果这个 value 被用在多路返回里,也不能使用 Optional。 正确的用法 选对构造器 Optional.of(T value) 如果需要断言值不为空,使用这个构...

2021-05-10
ElasticSearch 总结
ES 思维导图 ElasticSearch总结.xmind %% 完整的ES实战决策图 - 基于Leads系统真实案例 flowchart TD %% ========== 字段类型演进 ========== TypeEvolution([ES 5.0 类型演进]) --> StringSplit{string类型拆分} StringSplit -->|全文搜索| TextType[text类型] StringSplit -->|精确匹配/聚合/排序| KeywordType[keyword类型] %% ========== 字段设计部分 ========== Start([开始ES字段设计]) --> FieldType{需要索引该字段吗?} FieldType -->|否| Skip[不索引该字段] FieldType -->|是| DataType{数据类型?} DataTyp...

2026-01-12
Java 并发编程笔记
juc.xmind 写在前面的话 并发编程最早的实践都在操作系统里。高层语言的并发模型都要基于底层系统对硬件抽象和并发的设计来设计和实现,不能超出操作系统允许的范围。所谓的高级抽象总体上是简化对 OS 底层机制的复杂调用。 并发与异步 本文聚焦并发(Concurrency),即多任务在同一时间段内的交替或并行执行,核心问题是资源共享、线程同步与协作。 **异步(Asynchronous)**是另一维度:调用方发起操作后不等结果返回即继续执行,通过回调、Future或事件机制获取结果。异步可通过单线程事件循环实现,也可依托多线程并发实现。 二者关系:并发关注"多任务如何执行与协调",异步关注"调用是否阻塞等待"。并发编程常涉及异步,但本文不展开异步编程模式(如响应式流、协程),相关内容请参阅《Java 线程池笔记》。 管程 理论和实践之间是有鸿沟的,要弥合这种鸿沟,通常需要我们去学习别人的实践。比如并发的标准设计思想来自于操作系统里的管程(monitor),我们应当学习管程,进而了解标准的并发模型-管理共享变量和线程(并发任务)间通信的基本...

2025-07-29
Java 字符编码与 Unicode 完全指南——从 BMP 到增补平面,从代码单元到字形簇
“一个 char 就是一个字符”——这个直觉在 Java 中是错误的。一个 emoji 👨👩👧👦 在 Java 中占 11 个 char,但在用户眼中只是一个字符。本文将从 Unicode 的基础概念出发,深入剖析 Java 的字符编码机制,揭示 char、码点、代码单元、字形簇之间的层次关系。 Part 1: Unicode 基础——字符集的大一统 从 ASCII 到 Unicode 的演进 编码 年份 字符数 位宽 覆盖范围 ASCII 1963 128 7 位 英文字母、数字、控制字符 ISO 8859-1 1987 256 8 位 西欧语言 GB2312 1980 6,763 汉字 双字节 简体中文 GBK 1995 21,886 汉字 双字节 简繁中文 Shift_JIS 1982 ~7,000 变长 日文 Unicode 1.0 1991 7,161 16 位(最初设想) 多语言 Unicode 16.0 2024 154,998 21 位(实际) 全球所有文字 + emoji Unicode 之前的世界是编...

2023-01-13
Java 原生 API
Java 原生 API 模式总览 本文覆盖以下可迁移模式: # 模式名称 一句话口诀 覆盖用例 1 字符串常量池复用 相同字面量共享同一对象 String.intern()、编译期常量折叠 2 契约式设计 重写 equals 必须重写 hashCode HashMap 键、Set 元素 3 线程状态机协作 interrupt 是协作式终止标志 Thread.interrupt()、Future.cancel() 4 双亲委派加载 父类加载器优先防止类冲突 ClassLoader、Tomcat 类加载 5 异常链传递 包装异常保留原始栈踪迹 ServletException、RuntimeException 6 不可变视图 原始集合的只读包装 Collections.unmodifiableList() 7 空值防御性编程 明确表达可能为空的返回值 Optional、Objects.requireNonNull() 8 异步组合编程 链式调用编排多阶段任务 CompletableFuture.thenCompose() 9 分段锁到 C...

2020-03-11
Java Logging
log 历史 阶段 阶段 阶段 阶段 阶段 log4j apache commons logging(JCL) log4j2 JUL simple log logback + slf4j 多个项目使用不同的 logging 库 + 传递依赖等于依赖管理不规范,日志库泛滥以至互斥。 具体框架与门面 所谓的日志框架,指的是日志输出的具体实现,常见的日志框架包括但不仅限于 JUL(Java Util Logging)、Log4j、Log4j2 和 Logback。这些框架的功能不尽相同,比如有些框架支持友好地打印异常,有些不支持,有些框架不支持,不同的框架的日志级别也各有差异。 因此,诞生了日志门面。所谓的门面,就是“使用一个中间层解耦”这一具体思想的应用。使用了门面,可以屏蔽日志使用者对于具体差异的依赖,既让代码变得整洁,而且可以简单地切换实现而不需要修改代码。没有日志门面,不足以统一日志框架的使用。 log facade(定义 interface,早期的 JCL 时代,facade 也被叫做接口)-> log imp...
Announcement
人生只是,守株待兔





