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这样的产品会有很多种。

  • 相关阅读:
    Kafka: Producer (0.10.0.0)
    Kafka:架构简介【转】
    ZooKeeper示例 分布式锁
    机器学习---人脸对齐的基于形状模型的训练
    人脸妆容迁移---研究和思考
    机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
    基于opencv+Dlib的面部合成(Face Morph)
    c语言编程-----指向二维数组的指针
    工具软件 PYUV打开raw图片
    eclipse 使用问题
  • 原文地址:https://www.cnblogs.com/push-blackpearl/p/14518225.html
Copyright © 2011-2022 走看看