【发布时间】:2011-09-23 07:41:43
【问题描述】:
我正在尝试为 spring 控制器方法创建一个 junit 测试,但我不断收到以下错误
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request,
or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message,
your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:123)
我已经添加了它告诉我我需要的东西(我已经分别尝试过)并且目前我的 web.xml 包含
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我尝试测试的方法类似于
@Controller
@RemotingDestination
public class MyController {
public Response foo()
{
//...
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession httpSession = attr.getRequest().getSession(true);
//...
}
我的 junit 测试只是调用 myController.foo() 并检查响应。所以我不能创建一个模拟对象来传递给方法来解决这个问题。
所以我想我的问题是,是否存在一些我尚未偶然发现的配置或技巧可以让这个运行而无需重构我的控制器方法?
【问题讨论】:
标签: java spring model-view-controller spring-mvc junit