关于单元测试过滤器,过滤器中依赖无法注入的问题

问题遇到的现象和发生背景

我写了一个过滤器,里面注入了一个依赖,正常启动的时候这个依赖是可以使用的。不过在单元测试中调用过滤器时,这个依赖为null,导致过滤器无法继续执行。

问题相关代码,请勿粘贴截图

单测:

@RunWith(PandoraBootRunner.class)
@DelegateTo(MockitoJUnitRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class FilterTest {
    private AuthorityManagementFilter filter = new AuthorityManagementFilter();
    @Test
    public void testDoFilter() {
        MockHttpServletRequest req = new MockHttpServletRequest();
        MockHttpServletResponse res = new MockHttpServletResponse();
        MockFilterChain filterChain = new MockFilterChain();
        req.setRequestURI("/test/junit");
        req.setParameter("name", "test_name");
        try {
            filter.doFilter(req, res, filterChain);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

过滤器:

@Slf4j
@WebFilter(urlPatterns = "/api/*")
public class AuthorityManagementFilter implements Filter {
    @Resource
    private CustomerConfigLoader customerConfigLoader;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        ServletContext context = filterConfig.getServletContext();
        try {
            ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
            if (ctx != null) {
                customerConfigLoader = ctx.getBean(CustomerConfigLoader.class);
            }
        } catch (Exception e) {
            log.error("SsoFilter Exception: {}", e);
        }
    }
   @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        List<CustomerConfig> customer = customerConfigLoader.getConfigs();

运行结果及报错内容
    注入的customerConfigLoader还是null
我的解答思路和尝试过的方法
在单测内导入依赖可以成功,但是在过滤器就不可以。我试过换注解和手动authorityManagementFilter.init(mockFilterConfig);但是mockFilterConfig.getServletContext()是null
我想要达到的结果
想要将单测覆盖超过百分之五十,但是开头就需要获取这个customer ,如果为null的话就不可能继续执行过滤器doFilter方法,希望您能帮助我。
private AuthorityManagementFilter filter = new AuthorityManagementFilter();

你不应该通过new的方式创建filter的,应该使用依赖注入的方式创建 @Autowired/@Resource

因为你单测的时候,Filter 中的 init()方法并没有调用,所以等于没有初始化 CustomerConfigLoader 这个 Bean,以至于 你去调用是 null,你得将初始化这个操作 @Before。