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

  • 相关阅读:
    9.17考试
    Something
    tesuto-Mobius
    7.22考试
    填坑...P1546 最短网络 Agri-Net
    P1125 笨小猴
    P2822 组合数问题
    致我们曾经刷过的水题
    Luogu P1186 玛丽卡
    Luogu P1726 上白泽慧音
  • 原文地址:https://www.cnblogs.com/push-blackpearl/p/14518225.html
Copyright © 2011-2022 走看看