AssertJ assertThat调试时执行耗时过长问题求助
环境信息
- 平台:Mac系统上的IntelliJ IDEA
- Java版本:openjdk 11.0.20 2023-07-18 LTS
OpenJDK Runtime Environment (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (build 11.0.20+8-LTS, mixed mode) - AssertJ版本:org.assertj:assertj-core:3.16.1
已查阅Baeldung、Project Lombok及AssertJ官方网站等平台,未找到有效解决思路。
简化后的测试代码如下:
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @DisplayName("This is just a test of AssertJ") public class testAssertJ { @Test public void assertJTest() { assertThat("actualMessage").isEqualTo("actualMessage"); } }
代码正常执行仅需毫秒级完成,但调试时(在assertThat所在行设置断点并单步执行),该步骤耗时可达30秒。
可能的原因及排查方向
IDE调试器的类加载/字节码处理延迟
IntelliJ IDEA调试器在处理AssertJ的assertThat方法时,需要加载大量内部辅助类、处理字节码增强逻辑。旧版本IDEA对Java 11的调试兼容性可能存在优化不足,导致类加载过程阻塞。JIT优化禁用导致的初始化开销放大
调试模式下JVM会禁用即时编译(JIT)优化,AssertJ创建StringAssert实例时的内部初始化逻辑(如加载断言模板、初始化比较器链)原本依赖JIT优化提速,调试时失去优化后耗时被放大,加上调试器的逐行追踪进一步拉长时间。Mac文件系统或权限限制
调试时IDE需要频繁读取依赖包中的类文件,Mac的APFS文件系统在某些场景下存在文件访问延迟,或者IDE没有足够权限快速读取AssertJ的Jar包内容,导致类加载缓慢。AssertJ版本与Java版本的兼容性问题
你使用的AssertJ 3.16.1发布于2020年,与2023年发布的Java 11.0.20可能存在兼容性缝隙。新版本AssertJ已针对Java 11+优化了调试性能,升级到3.24.x等较新版本可尝试解决问题。IDE调试配置冗余
若开启了“Force early class loading”等调试选项,会导致调试时提前加载大量不必要的类,增加耗时。可检查IDEA调试配置,关闭不必要的类加载追踪选项。
内容的提问来源于stack exchange,提问作者yorkshireflatcap

