@SpyBean 注解会因为循环依赖报错,还能怎么部分 Mock?

2023-01-04 08:42:09 +08:00
 jaredyam

想使用 @SpyBean 注解部分 Mock 掉业务逻辑里的数据库 CRUD 方法,但在运行测试时会因为业务逻辑类间存在循环依赖报错(这块目前改不了...)。还有什么方法可以部分 Mock 方法但不会因为循环依赖报错吗?实在不行就还是调数据库吧...

1912 次点击
所在节点    Java
9 条回复
qinxi
2023-01-04 09:06:06 +08:00
nothingistrue
2023-01-04 09:12:37 +08:00
改成 @MockBean 外加手动 Spy 的方式,太困难就建议放弃单元测试。存在循环依赖的情况下,做单元测试这种行为就是耍流氓。
jaredyam
2023-01-04 09:34:29 +08:00
还是一样的报错
cubecube
2023-01-04 09:34:57 +08:00
@nothingistrue 可以把单元放大再测试,把循环部分包进去
jaredyam
2023-01-04 09:36:36 +08:00
@nothingistrue 反着来的话确实有些麻烦
nothingistrue
2023-01-04 09:43:49 +08:00
@cubecube #4 它这是要 Mock/Spy 查询数据库的最底层 Bean ,单元放多大都避免不了。

@jaredyam 相对来说,不 Mock/Spy CRUD 方法,换 H2 临时内存数据库+建表、初始化、清理数据库的脚本,可能会更省事点。
nothingistrue
2023-01-04 09:48:08 +08:00
CRUD 方法涉及到基础设施,其实是很难 Mock 、Spy 的,基本上都避免不了手写脚本。Spring 的单元测试,只有在结合 Spring Data JPA 的情况下,才能避免大量的数据库脚本处理。或者换句话说,没用 Spring Data JPA ,就别搞涉及到数据库操作的单元测试。
cubecube
2023-01-04 09:49:45 +08:00
@nothingistrue ok 。。没认真看题,原来是 db 相关的
zhenjiachen
2023-01-04 11:45:35 +08:00
同意 6 楼,如果用到了数据库的唯一特性就用 devcontainers

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

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

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

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

© 2021 V2EX