1. ホーム
  2. spring

リクエストコンテキストに依存するメソッドの単体テスト

2023-08-27 06:21:38

質問

私は次の行を含むメソッドのユニットテストを書いています。

String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId();

以下のようなエラーが出ます。

java.lang.IllegalStateException: スレッドバインドされたリクエストは見つかりませんでした。これは 実際の Web リクエスト以外のリクエスト属性を指しているのでしょうか。 または、最初に受信したスレッドの外側でリクエストを処理していますか?もし Web リクエストの中で実際に操作しているにもかかわらず、このメッセージが表示されるのであれば、あなたのコードはおそらく Web リクエストの外側で実行されているのでしょう。 の外側で実行されている可能性があります。 DispatcherServlet/DispatcherPortletの外側で動作している可能性があります。 RequestContextListener または RequestContextFilter を使用して、現在の をリクエストしてください。

理由は明白で、リクエストコンテキストでテストを実行していないからです。

問題は、リクエストコンテキストに依存するメソッドへの呼び出しを含むメソッドを、テスト環境でどのようにテストできるかということです。

ありがとうございました。

どのように解決するのですか?

Spring-testには、MockHttpServletRequestという柔軟なリクエストモックがあります。

MockHttpServletRequest request = new MockHttpServletRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));