JMH集成JUnit执行测试时报org.junit包不存在编译错误如何解决
错误根本原因
编译报错的核心是main源码目录下的类无法访问测试作用域的JUnit依赖,90%以上的这类场景都是你在Maven/Gradle配置中为JUnit依赖指定了test作用域,而你的MyBenchmark类存放在src/main/java路径下,test作用域的依赖仅对src/test/java路径下的代码可见,main目录代码编译时自然找不到JUnit相关类。
可选解决方案
方案1:调整类存放位置(推荐)
- 将
MyBenchmark类从src/main/java/com/example/移动到src/test/java/com/example/路径下 - 无需修改任何依赖配置,测试作用域的JUnit对test目录代码天然可见,重新构建即可正常编译
方案2:修改JUnit依赖作用域
如果确实需要把JMH基准测试类放在main目录下,直接移除JUnit的test作用域限制即可:
- Maven项目修改
pom.xml中JUnit依赖配置,删除<scope>test</scope>行:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <!-- 删除下面这行配置 --> <!-- <scope>test</scope> --> </dependency>
- Gradle项目修改
build.gradle中JUnit的依赖声明,把testImplementation 'junit:junit:4.13.1'改为implementation 'junit:junit:4.13.1'
JMH基准测试优化建议
你当前写的benchmark1方法存在死代码消除问题:JVM会自动判定sum变量没有被使用,直接删除这段计算逻辑,最终得到的测试结果完全不准确,建议用Blackhole消费计算结果:
@Benchmark public void benchmark1 (Blackhole blackhole) { int a = 5; int b = 10; int sum = a + b; blackhole.consume(sum); }
内容的提问来源于stack exchange,提问作者pradeep3009
相关产品推荐
相关产品推荐

