integration - web.xml 中的 Spring-test 和 ServletContextListener

标签 integration web.xml spring-test

我尝试使用 spring-test(3.2.10) 并通过 TestNG 进行集成测试 link .

我创建了 RootTest.java

@WebAppConfiguration
@ContextConfiguration("file:src/test/resources/root-context2.xml")
public class ReferenceServiceTest extends AbstractTestNGSpringContextTests {
...

spring 上下文加载成功。但我的全局变量没有实例化,因为 web.xml 被忽略。在 web.xml 中,我有自己的“监听器类”(ServletContextListener 的实现)和“上下文参数”。我如何使用 Spring 集成测试上下文加载 web.xml 上下文(并调用所有应用程序启动监听器)?

最佳答案

正如引用手册中所述,Spring MVC 测试框架...

"loads the actual Spring configuration through the TestContext framework and always uses the DispatcherServlet to process requests thus approximating full integration tests without requiring a running Servlet container."

关键点是“没有...... Servlet容器”。因此web.xml此处不涉及。也就是说,web.xml中没有办法进行配置。对使用 Spring MVC 测试框架的集成测试产生影响。

话虽如此,现在可以注册一个 Servlet FilterMockMvc像这样:

mockMvcBuilder.addFilters(myServletFilter);

mockMvcBuilder.addFilters(myResourceFilter, "/resources/*");

并且您可以配置context-param手动将条目添加到ServletContext (实际上是 Spring 的 MockServletContext )在 MockMvc 上执行断言之前像这样:

wac.getServletContext().setInitParameter(name, value);

但是...没有办法配置 ServletContextListener使用 Spring MVC 测试。如果您希望将一个监听器应用于通过 Spring MVC 传递的所有请求,作为替代方案,您可以考虑实现自定义 HandlerInterceptorWebRequestInterceptor (请参阅引用手册中的Configuring interceptors)。

问候,

山姆

关于integration - web.xml 中的 Spring-test 和 ServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329160/

相关文章:

testing - 如何在不使用服务的情况下测试 Grails 3.3.6 中的 Controller 操作

java.lang.NoSuchMethodError : javaxservlet. http.HttpServletRequest.isAsyncStarted()Z

java - 使用 TestNG 和 Spring Transaction 进行并发测试

java - 如何使用 JMockit 模拟 void 方法异常

mysql - JHipster 和 HIVE 集成

machine-learning - 在 R 中对遵循正态分布的变量进行函数积分

.net - 如何从 .Net 与 Oracle Financials api 通信?

java - 如何从文件夹中包含的jsp转到servlet

java - 如何映射 "root"Servlet 以便其他脚本仍可运行?

java - Java Web 应用程序中的可选数据源