MockMvc로 리디렉션된 URL의 HTTP 상태 코드 테스트
MockMvc를 사용하여 Spring Boot Application에서 로그인 과정을 테스트하고 싶습니다. 로그인이 성공하면 사용자는 /home으로 리디렉션됩니다.이를 테스트하기 위해 다음을 사용합니다.
@Test
public void testLogin() throws Exception {
RequestBuilder requestBuilder = formLogin().user("test@tester.de").password("test");
mockMvc.perform(requestBuilder).andExpect(redirectedUrl("/home")).andExpect(status().isFound());
}
이 테스트는 예상한 결과를 제공합니다.
또한 리디렉션된 페이지(/home)의 HTTP 상태 코드를 테스트해야 합니다./home-page가 HTTP 500 내부 서버 오류를 반환한다고 가정해 보겠습니다. 이 오류를 테스트할 수 있어야 합니다.
나는 다음을 시도했습니다.
@Test
public void testLogin() throws Exception {
RequestBuilder requestBuilder = formLogin().user("test@tester.de").password("test");
mockMvc.perform(requestBuilder).andExpect(redirectedUrl("/home")).andExpect(status().isFound());
mockMvc.perform(get("/home").with(csrf())).andExpect(status().isOk());
}
대신에 200이나 500을 받으면(오류가 발생할 경우) 상태 코드 302를 받습니다.
리디렉션 URL을 따를 때 HTTP 상태 코드를 올바르게 테스트할 수 있는 방법이 있습니까?
감사와 안부를 전합니다,
첫째, 두 가지 다른 시나리오를 테스트하고 있기 때문에 테스트를 두 개의 개별 테스트로 나눕니다.
@Test
public void testSuccessfulLogin() throws Exception {
RequestBuilder requestBuilder = formLogin().user("test@tester.de").password("test");
mockMvc.perform(requestBuilder).andExpect(redirectedUrl("/home")).andExpect(status().isFound());
}
@Test
public void testHomepageThrows500() throws Exception {
// configure a mock service in the controller to throw an exception
RequestBuilder requestBuilder = formLogin().user("test@tester.de").password("test");
mockMvc.perform(requestBuilder).andExpect(redirectedUrl("/home")).andExpect(status().is5xxServerError());
}
첫 번째 테스트는 성공적인 로그인 시나리오 테스트입니다.
두 번째 테스트는 질문에서 말씀하셨듯이 홈 페이지(컨트롤러 가정)에서 HTTP 500을 반환하는 것입니다.
홈 페이지로 이동하려면 로그인해야 합니다. 오류가 발생하는 것은 로그온 행위가 아니라 일단 로그인한 후 컨트롤러 자체입니다.
컨트롤러가 HTTP 500을 반환하도록 하려면 몇 가지 오류를 시뮬레이션해야 합니다.당신의 컨트롤러를 보지 못한 상태에서, 나는 어떤 서비스가 주입되어 있다고 추측할 수 밖에 없습니다.테스트에서 해당 모의실험을 제공한 다음 예외를 적용하도록 모의실험을 구성할 수 있어야 합니다.
다음과 같은 모의실험을 할 수 있어야 합니다.
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(HomeController.class)
public class HomeControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private YourService yourService;
그런 다음 테스트 내에서 다음과 같은 작업을 수행합니다(저는 모의실험의 BDD 방법을 사용하고 있습니다).
@Test
public void testHomepageThrows500() throws Exception {
given(yourService.someMethod()).willThrow(new Exception("something bad happened");
RequestBuilder requestBuilder = formLogin().user("test@tester.de").password("test");
mockMvc.perform(requestBuilder).andExpect(redirectedUrl("/home")).andExpect(status().is5xxServerError());
}
언급URL : https://stackoverflow.com/questions/41142871/test-http-status-code-of-redirected-url-with-mockmvc
'programing' 카테고리의 다른 글
C - 정수가 할당되었는지 확인 (0) | 2023.09.18 |
---|---|
양식의 모든 필드를 지우는 jQuery/Javascript 함수 (0) | 2023.09.18 |
C/Unix의 소켓 쌍() (0) | 2023.09.18 |
자동 추가 기능 대 COM 추가 기능 (0) | 2023.09.18 |
data.frame에서 조건부 값 대체 (0) | 2023.09.18 |