我有一个用@WebListener注释的类,扩展了ServletContextListener,我测试的另一个类依赖于执行。当我手动测试(即在Tomcat中运行)时,它可以工作,但在我的JUnit测试中,@ WebListener类永远不会被执行。我假设我需要在配置中添加一些内容才能让它执行,但我不确定是什么。或者我是否需要在测试中手动运行它?
编辑: 这是课程的基础
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Retrieve spring application context
ServletContext servletContext = event.getServletContext();
springContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
...
}
...
}
我已添加到我的测试类中:
@Before
public void mockInit() {
MockServletContext mockContext = new MockServletContext();
new MyListener().contextInitialized(new ServletContextEvent(mockContext));
}
但springContext
中的contextInitialized
变量为空。
答案 0 :(得分:2)
我错过了几件事。 1,我的测试类没有@WebAppConfiguration
@WebAppConfiguration
public class ClassAbcTest extends TestBase {
...
}
其次,我需要设置根应用程序上下文:
@Autowired
private WebApplicationContext webAppContext;
@Before
public void mockInit() {
MockServletContext mockServletContext = new MockServletContext();
mockServletContext.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, webAppContext);
new MyListener().contextInitialized(new ServletContextEvent(
mockServletContext));
}
答案 1 :(得分:1)
假设您使用MockMvc
进行测试,可以注册Filter
MockMvcBuilders.webAppContextSetup(webAppContext).addFilter(yourFilter, urlPatterns);
答案 2 :(得分:0)
我意识到这是一个老问题,但是我无意中找到了一个未在此处显示的答案。
我正在@WebListener
在Junit测试期间,缺少Web侦听器类,并且无法进行FTP连接。
以下注释已修复
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
我希望这个答案可以帮助任何在此页面上迷路的人,以同样的方式帮助我。