spring-boot - 如何在 Spring 中测试自定义 WebApplicationInitializer
问题描述
我将 web.xml 移动到 Java 注释配置
我的自定义代码是
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setDisplayName("app-name");
context.register(Config.class);
container.addListener(new RequestContextListener());
container.addListener(new ContextLoaderListener(context));
Dynamic dispatcher = container.addServlet("app-name", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/app-name-rest/*");
}
我尝试了解决方案https://stackoverflow.com/a/25210356/6700081但线路覆盖率仍为 0%
解决方案
我有同样的问题并以这种方式解决:
public class WebInitializerTest {
@Mock
private MockServletContext mockServletContext;
@Mock
private ServletRegistration.Dynamic mockServletRegistration;
@BeforeEach
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testOnStartup() {
WebInitializer webInitializer = new WebInitializer();
when(mockServletContext.addServlet(ArgumentMatchers.eq("app-name"), any(Servlet.class))).thenReturn(mockServletRegistration);
webInitializer.onStartup(mockServletContext);
verify(mockServletContext, times(1)).addListener(any(RequestContextListener.class));
// other asserts..
}}
注意:我使用 Junit5 (@BeforeEach)
推荐阅读
- php - 错误“Yajra \ Pdo \ Oci8 \ Exceptions \ Oci8Exception ORA-24415:用户名丢失或为空。” 使用 Laravel5.6
- spotfire - 直线之间的距离
- c - 形成最小的数
- amazon-web-services - 如何检索 AWS 中正在运行的 Step Functions 的当前状态
- c++ - 使用函数指针时,ESP 未在函数调用中正确保存
- angular - 如何使另一个页面成为 asp.net 样板和 Angular 中的默认页面
- javascript - HTML5 Web 通知权限问题
- wordpress - 使用 Redux::setOption 在媒体选项中保存值
- sql - NULL 值破坏搜索
- javascript - 如何使用动画隐藏点击外部的弹出窗口