zoukankan      html  css  js  c++  java
  • @MockBean 注解后 bean成员对象为 null?

    笔者在写自测的时候遇到的问题:

    我想模拟一个Bean,并在之后使用Mockito打桩,于是使用了 @MockBean 注解(spring集成mockito的产物),但代码编写好了后启动测试却报NullPointerException
    好家伙,bean没有Mock上。

    交代一下我的代码背景:

    框架:SpringBoot、SpringBoot Test、TestNG、Mockito

    @SpringBootTest
    @TestPropertySource("classpath:application.properties")
    public class XXXServiceTest extends AbstractTestNGSpringContextTests {
      
      @MockBean
      XXXComponent xxxComponent;  // null ???
    }
    

    解决办法

    // 在测试类上加
    @SpringBootTest
    @TestPropertySource("classpath:application.properties")
    @TestExecutionListeners(MockitoTestExecutionListener.class)
    public class XXXServiceTest extends AbstractTestNGSpringContextTests {
      
      @MockBean
      XXXComponent xxxComponent;  // 有了有了
    }
    

    原因

    因为Spring集成TestNG的抽象类: AbstractTestNGSpringContextTests 上并没加关于Mockito相关的测试监听器,所以就没有运用上MockBean的注解功能,看源码

    @TestExecutionListeners({ServletTestExecutionListener.class, DirtiesContextBeforeModesTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class})
    public abstract class AbstractTestNGSpringContextTests implements IHookable, ApplicationContextAware {
    

    PS:官方也有讨论过这个issue,但官方并不打算集成进来,所以叫大家自己加个Listener则是,我认为也是该这样,因为Mockito这样的产品会有很多种。

  • 相关阅读:
    接口的幂等性怎么设计?
    python 实现批量 WKT 转 KML
    火星坐标(GCJ02)高精度反算
    GDAL RasterIO 速度测试程序
    linux下 QtCreator 运行不显示 qDebug 输出的问题
    我使用的 clang-format 配置文件
    cephadm 离线安装部署 ceph 集群记录
    解决vcpkg无法交叉编译arm64版本 HDF5 库的问题
    QEMU 虚拟 aarch64(arm64) 记录
    DE-9IM 空间关系模型
  • 原文地址:https://www.cnblogs.com/push-blackpearl/p/14518225.html
Copyright © 2011-2022 走看看