質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

0回答

2228閲覧

Junitテストにおいて、@SessionScopeを指定したセッションスコープクラスの値をMockMvcにて使用できない

kyo_k

総合スコア0

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2021/06/15 12:02

編集2021/06/20 09:42

前提・実現したいこと

formクラスのvalidationやリクエスト内容を含めたコントローラのテストを行う必要があるため、MockMvcを使用しているのですが、
前提としてログイン処理があり、ログイン処理にてセッションに登録した値を他の処理で参照することができません。
Junitではなくビルドした上でサーバー上で実行すれば問題なく動作するのですが、MockMvcだと実行毎にセッションを維持することができないようです。
何か良い方法はないでしょうか。

セッションスコープクラス

java

1@Component 2@SessionScope 3@Data 4@NoArgsConstructor 5@AllArgsConstructor 6public class SampleSession implements Serializable { 7 private String id; 8}

Controller

java

1@RestController 2public class SampleSessionTestController { 3 4 @Autowired 5 SampleSession sampleSession; 6 7// セッション登録処理 8 @GetMapping("/sampleSession") 9 public void sampleLogin() { 10 11 this.sampleSession.setId("1"); 12 13 } 14 15// セッション確認処理 16 @GetMapping("/sampleSession/get") 17 public String res() { 18 19 return this.sampleSession.getId(); 20 21 } 22}

テストコード

@RunWith(SpringRunner.class) @ExtendWith(MockitoExtension.class) @SpringBootTest @AutoConfigureMockMvc public class SampleSessionTestControllerTest { @Autowired SampleSessionTestController sampleSessionTestController; @Autowired MockMvc mockMvc; @Autowired SampleSession sampleSession; @Test public void SampleSessionTest() throws Exception { // セッション登録 MvcResult mvcResult = mockMvc.perform(get("/sampleSession") ) .andExpect(status().is(200)) .andReturn(); // セッション継続用にMockHttpSession取得 // これでセッションを維持できると見つけたのですが、上手くいかず・・・ MockHttpSession mockSession = (MockHttpSession) mvcResult.getRequest().getSession(); // セッション確認 this.mockMvc.perform( get("/sampleSession/get") .session(mockSession) ) .andExpect(status().is(200)) .andExpect(content().string(containsString("1"))); } }

結果

java.lang.AssertionError: Response content Expected: a string containing "1" but: was ""

補足情報

Spring v2.4.5
junit 5.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiino

2021/06/19 01:51

SampleSessionTestControllerTest class にもアノテーションを付与していると思うのですが、どのような設定でされているか教えていただけないでしょうか。 mockMvc の生成をどのように設定して生成しているのかが気になっております
kyo_k

2021/06/20 09:42

すみません記載が漏れていました。 更新した通り @RunWith(SpringRunner.class) @ExtendWith(MockitoExtension.class) @SpringBootTest @AutoConfigureMockMvc の4つです。
rysh

2021/06/22 22:10

kenynoさんも触れてますが、mockMVCがどういうクラスかわからないと解読するのは厳しいですね。
kiino

2021/06/26 05:45

アノテーションの付与ありがとうございます。 AutoConfigureMockMvc でmockMVC を生成してるんですね。 であればプロダクションコードと同じコンポーネントがSampleSession が入って動作するはずなのですが、 動かない理由がわからないので正直お手上げです テスト用の SampleSession の Bean 定義を別途していたりはしないでしょうか? src/test/java 以下のどこかに @Configration をつけたクラス内で @Bean をつけたメソッドから SampleSession クラスのモックを定義していないでしょうか
kyo_k

2021/06/30 03:36

ご回答ありがとうございます。 @Configurationや@Beanはプロジェクト内に存在せず、記載したコード以外は特に実装していません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問