본문 바로가기
Error

[JUnit] Caused by: 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 operatin..

by 지구 2021. 7. 28.

Caused by: 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: In this case, use RequestContextListener or RequestContextFilter to expose the current request.


JUnit 으로 예외가 발생하는 테스트 코드를 작성하다가 위와 같은 오류를 만났다.

찾아보니 내가 예상하는 예외에서는 Header 에서 값을 꺼낸다고
(ServletRequestAttributes) RequestConteextHolder.currentRequestAttributes()).getRequest()로직을 수행하고 있었는데,
테스트 코드에서 HttpRequest 와 HttpResponse 를 찾을 수 없어서 (빈 생성이든 주입을 안했으니까..) 발생한 예외였다.

어쩔 수 없이 테스트 코드에서 Mockito 를 이용해서 해결하기로 하고 적용했다.

class MyServiceTest {

    @Mock
    private ServletRequestAttributes attributes;
    @Mock
    private HttpServletRequest request;

    @BeforeEach
    void setUp() {
        attributes = new ServletRequestAttributes(request);
        RequestContextHolder.setRequestAttributes(attributes);
    }

    @Test
    void .....
}
반응형

댓글