sam*_*sam 5 java junit mocking junit4 aem
如何用JUnit正确覆盖Filter?
@SlingFilter(order = -700, scope = SlingFilterScope.REQUEST)
public class LoggingFilter implements Filter {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
final FilterChain filterChain) throws IOException, ServletException {
final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
logger.debug("request for {}, with selector {}", slingRequest
.getRequestPathInfo().getResourcePath(), slingRequest
.getRequestPathInfo().getSelectorString());
filterChain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
Run Code Online (Sandbox Code Playgroud)
小智 3
调用 doFilter,传递模拟 ServletRequest、ServletResponse 和 FilterChain 作为其参数。
@Test
public void testDoFilter() {
LoggingFilter filterUnderTest = new LoggingFilter();
MockFilterChain mockChain = new MockFilterChain();
MockServletRequest req = new MockServletRequest("/test.jsp");
MockServletResponse rsp = new MockServletResponse();
filterUnderTest.doFilter(req, rsp, mockChain);
assertEquals("/test.jsp",rsp.getLastRedirect());
}
Run Code Online (Sandbox Code Playgroud)
在实践中,您需要将设置移至一个@Before setUp()方法中,并编写更多@Test方法来覆盖每个可能的执行路径。
JMock您可能会使用类似或 之类的模拟框架Mockito来创建模拟,而不是MockModeService我在这里使用的假设等。
这是一种单元测试方法,而不是集成测试。您仅练习被测试的单元(和测试代码)。