programing

MockMvc로 리디렉션된 URL의 HTTP 상태 코드 테스트

closeapi 2023. 9. 18. 21:26
반응형

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

반응형