Я пытаюсь создать тест 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 () и проверяет ответ. Поэтому я не могу создать фиктивный объект для передачи в метод, чтобы обойти эту проблему.
Итак, я полагаю, что мой вопрос заключается в том, существует ли какая-то конфигурация или хитрость, на которую я еще не наткнулся, которая сделает этот запуск без необходимости рефакторинга метода моего контроллера?