请教一下, springboot 单元测试启动报错?

2023-05-10 11:42:29 +08:00
 SZhan
一直无法在项目中引入单元测试,以前使用其他框架时没遇过这个问题,现在使用的这套框架使用单元测试一直无法调用 bean 中的方法进行测试,报错信息:Caused by: java.lang.ClassCastException: org.springframework.core.env.StandardEnvironment cannot be cast to org.springframework.web.context.support.StandardServletEnvironment ,这个报错没搜到啥解决办法,想麻烦大佬们,是哪里配置错了,还是框架自身不支持的原因么
https://imgur.com/1ISX7FV
https://imgur.com/undefined

PS: 尝试过 @SpringBootTest 注解指定启动类,也还是报这个错,麻烦大佬们帮帮忙,感激不尽!
2331 次点击
所在节点    Java
26 条回复
BigR
2023-05-10 13:41:41 +08:00
版本冲突了吧
wolfie
2023-05-10 13:53:41 +08:00
感觉是版本问题 + 1

去掉 @RunWith ,Test 注解改用 org.junit.jupiter.api.Test 试试?
SZhan
2023-05-10 14:34:47 +08:00
感谢两位大佬回复 @lncywlc @wolfie 尝试去掉 @RunWith 改了 test 注解引的包,还是报一样的错误。版本冲突是什么意思呢,junit 版本是 4 的
SZhan
2023-05-10 14:36:14 +08:00
wolfie
2023-05-10 14:56:15 +08:00
dependencyManagement 里面用 org.springframework.boot:spring-boot-dependencies:${spring-boot-version}

或者 手动找 pom 文件
https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/2.6.7/

以 boot 为基准,统一一下组件版本看看。
LeegoYih
2023-05-10 15:00:30 +08:00
跟 Junit 无关,大概率是其他依赖引入了不同版本的 Spring 导致冲突
4lieS
2023-05-10 16:07:54 +08:00
@SZhan 版本冲突就是比如有两个依赖 A 和 B ,他们自身同时又依赖了 C ,但是 A 依赖的是 C1.0.0 ,B 依赖的是 C2.0.0 。由于项目中最终只能使用一个依赖,这就会导致 A 或 B 其中一个编译或运行时可能会出现问题,最好还是要统一下版本。
bugmakerxs
2023-05-10 16:21:48 +08:00
mvn dependency:tree 看看依赖项。
SZhan
2023-05-10 16:54:55 +08:00
感谢楼上各位老哥的指导,目前思路往依赖项冲突上排查,项目里面太多依赖,打算试试 maven-helper 插件辅助排查下
BigR
2023-05-10 17:55:18 +08:00
@SZhan junit 的版本要和 springboot 的版本对应。同时需要排除一下其它依赖引入的 junit 依赖包。
Kaiv2
2023-05-10 17:59:59 +08:00
@RunWith(SpringRunner.class)
@SpringBootTest(classes = XXXApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
Kaiv2
2023-05-10 18:01:50 +08:00
junit4 注解是这个 org.junit.Test
MichaelGzy
2023-05-11 08:45:45 +08:00
3.0.5?
SZhan
2023-05-11 09:41:52 +08:00
@Kaiv2 我一开始 就是按您这么写的,结果报上面那样的错了。然后才换成了另一个 test 注解
SZhan
2023-05-11 09:42:16 +08:00
@MichaelGzy boot 版本么? springboot 是 2.2.5 的
SZhan
2023-05-11 09:47:35 +08:00

大佬们,我排了一下 pom 文件,目前跟 junit 有关的冲突就是这些,项目是 springboot 2.2.5 对应的 junit 版本是 4.1.2 junit-jupiter 版本 5.5.2 跟官方一致的应该是
SZhan
2023-05-11 09:49:38 +08:00
@SZhan 。。。。发错图片了 不能删除回复的么!!完蛋
SZhan
2023-05-11 09:50:24 +08:00
SZhan
2023-05-11 09:59:36 +08:00
大佬们,看了下有冲突的依赖,跟 junit 相关的就上面图里的一个,这个项目 boot 版本 2.2.5 ,junit 版本是 4.1.2 (后来尝试注掉只保留 junit-jupiter5 也不行) junit-jupiter 版本是 5.5.2 跟官方要求的依赖版本应该是没有冲突。
这个框架是电信自研的,有问题就不太好解决。。。
litchinn
2023-05-11 10:41:07 +08:00
电信自研可还行
我比较倾向 6 楼的说法,可能是由于引用了其他依赖包含不同 spring 版本导致的冲突
idea 可以点开 maven 拓扑图搜索看看有没有不同版本,pom 文件里 Ctrl+Alt+Shift+U

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX