簡體   English   中英

過濾器單元測試 class

[英]Unit test for Filter class

我正在嘗試為以下過濾器 class 編寫單元測試,但我不確定如何完成。 我正在從事一個 Spring 項目並試圖修復一個漏洞,這就是我使用這個 class 的原因。

public class HSTSFilter implements Filter {
    private static final String HEADER_NAME = "Strict-Transport-Security";
    private static final String MAX_AGE_DIRECTIVE = "max-age=%s";
    private static final String INCLUDE_SUB_DOMAINS_DIRECTIVE = "includeSubDomains";
    private static final Logger logger = LoggerFactory.getLogger(HSTSFilter.class);

    private int maxAgeSeconds = 0;
    private boolean includeSubDomains = false;
    private String directives;

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        logger.info("request.isSecure() :: {}" , request.isSecure());

        if (request.isSecure() && response instanceof HttpServletResponse) {
            HttpServletResponse res = (HttpServletResponse) response;
            res.addHeader(HEADER_NAME, this.directives);
        }
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        maxAgeSeconds = Integer.parseInt(filterConfig.getInitParameter("maxAgeSeconds"));
        includeSubDomains = "true".equals(filterConfig.getInitParameter("includeSubDomains"));

        if (this.maxAgeSeconds <= 0) {
            throw new ServletException("Invalid maxAgeSeconds value :: " + maxAgeSeconds);
        }

        this.directives = String.format(MAX_AGE_DIRECTIVE, this.maxAgeSeconds);
        if (this.includeSubDomains) {
            this.directives += (" ; " + INCLUDE_SUB_DOMAINS_DIRECTIVE);
        }
    }

    @Override
    public void destroy() {
    }
}

在您的單元測試中,創建 ServletRequest、ServletResponse 和 FilterChain 的模擬 object。 使用這些模擬對象調用 doFilter。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM