前提・実現したいこと
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
あなたの回答
tips
プレビュー