JUnit4/JUnit5 注解
Created|Updated|Java
|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

2026-07-14
为什么叫"测试夹具":Fixture 的词源与跨领域漫游
测试夹具这个中文词带着工业感,让第一次听到它的开发者往往去搜索"是不是翻译错了"。词源确实如此:fixture 来自机械加工,后来进入电子测试领域,再由 Kent Beck 引入软件测试框架里。这个词在软件工程里覆盖的范围,也远比"单元测试"要宽。 从车间到代码 fixture 这个词在机械加工里有精确含义:在 CNC 车床或焊接台上,fixture 是一种工装,把工件固定在已知位置,让每次加工操作都从相同的起点开始。与 jig(引导刀具路径的夹具)不同,fixture 的职责只有一件事——把工件钳牢,消除定位误差。 词源上,fixture 来自拉丁语 figere(刺入、固定),经 fixura(固定物)演变为英语词汇,约在 16 世纪末进入法律语言,最初指"永久附着于不动产的动产"——嵌入墙体的管道、固定在地板上的书架,那些不能随意拆走的东西。 电子测试领域用法相似:一块 PCB 插入测试夹具后被固定在已知电气状态,探针才能重复施加相同的激励、在相同节点读取信号,排除接触不稳定的干扰。 三种用法的共同语义:将某个对象...

2020-09-27
现代垃圾收集器
所有的垃圾收集器,都基于弱分代假设。实际的垃圾回收效率取决于堆内对象的分布状况。垃圾回收并不能解决内存泄漏或者应用程序逻辑的不良分配习惯问题,要处理 JVM 内存回收问题的根本方法是对程序进行调优。 有几个常用原则: 减少临时对象,尽量复用内存。 使用对象池。 主动提前释放对象。 主动 gc。 好的代码比 tuning 更重要。 选 gc 算法比 tuning 参数重要,tuning 参数是最后一步。 其他情况,可以通过 tuning garbage collector 来解决。 操作系统的影响 SWAP 可能会显著增加 GC 时间,因为被换出的堆还要被换入。 美团的实践 参考: 《从实际案例聊聊Java应用的GC优化》 《Java中9种常见的CMS GC问题分析与解决》 Minor GC Major GC Full GC 垃圾收集器分类 可以看到一个现象:在大部分时候,g1 比 CMS 快,但极端的百分位里,CMS 比 g1 快。 出处见这里。 常用工具 命令行终端 标准终端类:jps、jinfo、jstat、jstack、jmap 功能整合类:jcm...

2020-04-05
Spring AOP 笔记
AOP 全景概览 核心问题定义 面向切面编程(Aspect-Oriented Programming,AOP)的核心目标是将横切关注点(Cross-cutting Concerns)从业务逻辑中分离出来。横切关注点是指那些散布在系统多个模块中的通用功能,如日志记录、事务管理、安全检查、性能监控等。在传统的面向对象编程中,这些功能往往需要在多个类中重复实现,导致代码冗余和耦合度增加。AOP 通过将这些横切关注点模块化为切面(Aspect),在不修改原有业务逻辑代码的情况下,实现对目标对象的增强。 核心概念速查表 概念 定义 Aspect 切面,横跨多个类的模块化关注点,通常由多个 Pointcut 和 Advice 组成 JoinPoint 连接点,程序执行过程中的特定位置,在 Spring AOP 中通常指方法执行点 Pointcut 切点,匹配 JoinPoint 的谓词表达式,定义 Advice 在何处执行 Advice 通知,切面在特定 JoinPoint 执行的动作,包括 Before、After、Around、AfterReturning、Af...

2018-10-22
JDWP 与远程调试
JDWP(Java Debug Wire Protocol),它提供了调试器和目标 JVM (target vm)之间的调试协议。 在 target vm 启动时,增加这个 JAVA_OPTS: 1JAVA_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=26310" 在服务器端,增加 remote debuging 的时候使用如下配置: 12345678# Java 9 以上-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000# Java 5-8-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000# Java 1.4.x -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,addre...
2025-07-29
HTTP 请求体只读一次之谜——Go 与 Java 的应对之道
在后端开发中,日志记录、签名验证、请求重放等场景都需要在中间件(Middleware/Filter)中读取 HTTP 请求体(Request Body)。然而,请求体在被读取一次后便无法再次获取——后续处理程序收到的是一个空的 Body,导致逻辑中断。 这并非 Bug,而是网络 I/O 流处理的基本特性。本文将从操作系统内核的 Socket 缓冲区出发,剖析这一现象的根源,并详细对比 Go 和 Java 在"可重复读 Body"问题上的解决方案及其背后截然不同的设计哲学。 第一部分:问题的根源——流的"阅后即焚"本质 为什么 HTTP 请求体默认只能读取一次? 请求体本质上是一个从网络连接中实时到达的字节流,而非一块已经完整存放在内存或磁盘上的数据块。理解这一点是理解"只读一次"问题的关键。 操作系统层面:Socket 读取缓冲区 当客户端发送 HTTP 请求时,数据通过 TCP 连接到达服务器的网络套接字(Socket)。操作系统内核维护着一个接收缓冲区(Receive Buffer),TCP 数据包到达后被暂存在这里...

2023-03-31
Spring Web
Spring MVC 把 httprequest 放入线程的过程 1234567891011public class ServletRequestAttributes extends AbstractRequestAttributes { /** * Create a new ServletRequestAttributes instance for the given request. * @param request current HTTP request */ public ServletRequestAttributes(HttpServletRequest request) { Assert.notNull(request, "Request must not be null"); this.request = request; }} 在 RequestContextFilter 的子类 OrderedRequestContextFilter: 123456789101112131415161718...

