V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jaredyam
V2EX  ›  Java

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

  •  
  •   jaredyam · 2023-01-04 08:42:09 +08:00 · 1877 次点击
    这是一个创建于 675 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    @jaredyam 相对来说,不 Mock/Spy CRUD 方法,换 H2 临时内存数据库+建表、初始化、清理数据库的脚本,可能会更省事点。
    nothingistrue
        7
    nothingistrue  
       2023-01-04 09:48:08 +08:00
    CRUD 方法涉及到基础设施,其实是很难 Mock 、Spy 的,基本上都避免不了手写脚本。Spring 的单元测试,只有在结合 Spring Data JPA 的情况下,才能避免大量的数据库脚本处理。或者换句话说,没用 Spring Data JPA ,就别搞涉及到数据库操作的单元测试。
    cubecube
        8
    cubecube  
       2023-01-04 09:49:45 +08:00
    @nothingistrue ok 。。没认真看题,原来是 db 相关的
    zhenjiachen
        9
    zhenjiachen  
       2023-01-04 11:45:35 +08:00 via iPhone
    同意 6 楼,如果用到了数据库的唯一特性就用 devcontainers
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.