【问题标题】:Mock WebApplicationContext to get property in Filter junit test模拟 WebApplicationContext 以在过滤器 junit 测试中获取属性
【发布时间】:2021-06-26 16:22:52
【问题描述】:

我有一个过滤器,我在它的 init 方法中使用了 servlet 上下文中的一些属性:

    @Override
public void init(FilterConfig filterConfig) {
    prop = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()).getEnvironment().getProperty("my.property");

}

我正在为此过滤器编写单元测试,但我不知道如何模拟 WebApplicationContext 以使用 WebApplicationContextUtils 并设置此属性。到目前为止,这是我尝试过的:

class FilterTest {
    @MockBean
    private FilterChain chain;
    @MockBean
    private WebApplicationContext webAppContextMock;
    @MockBean
    private HttpServletRequest httpServletRequest;
    @MockBean
    private HttpServletResponse httpServletResponse;
    @Autowired
    private MyFilter myFilter;
 @Test
    void doFilter() throws IOException, ServletException {
        MockServletContext mockServletContext = new MockServletContext();
        mockServletContext.setAttribute("my.property", "Property");
        Mockito.when(WebApplicationContextUtils.getWebApplicationContext(Mockito.any(ServletContext.class))).thenReturn(webAppContextMock);

}

由于 webApplicationContext,我有一个 npe,我应该将此 servlet 上下文映射到 webApplicationContext。我在这里缺少什么?提前致谢!

【问题讨论】:

    标签: java spring-boot junit mockito servlet-filters


    【解决方案1】:

    为了简单起见,我采用了另一种方法,在我的过滤器中,我只是删除了 init 部分并像这样注入了 Environment bean:

        private final Environment environment;
    
    public MyFilter(Environment environment) {
        this.environment = environment;
    }
    

    在doFilter方法中:

    String prop = environment.getProperty("my.property");
    

    然后在我的测试中,过滤器能够访问 my.property,因为 Environment 可以访问它。

    【讨论】:

      【解决方案2】:

      这里的问题是getRequiredWebApplicationContext() 是类WebApplicationContextUtils 的静态方法,不能直接使用JUnit 模拟。如果您真的想模拟它,请使用 power mock。 https://github.com/powermock/powermock/wiki/Mockito

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      相关资源
      最近更新 更多