Ben*_*Ben 7 java spring-mvc spring-mvc-test spring-boot mockmvc
我想使用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());
}
Run Code Online (Sandbox Code Playgroud)
该测试提供了预期的结果.
另外,我必须测试重定向页面(/ 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());
}
Run Code Online (Sandbox Code Playgroud)
相反,如果获得200或500(如果出现错误),我会得到状态代码302.
在遵循重定向URL时,有没有办法正确测试HTTP状态代码?
谢谢和最好的问候
首先,我将您的测试分为2个单独的测试,因为您要测试2个完全不同的场景:
@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());
}
Run Code Online (Sandbox Code Playgroud)
您的第一个测试是成功登录方案的测试。
正如您在问题中所说的那样,第二个测试是主页(假设控制器)返回HTTP 500的位置。
要转到主页,您仍然需要登录-这不是登录的行为登录后会生成错误,即控制器本身。
要使控制器返回HTTP 500,您将需要模拟一些错误。在没有看到您的控制器的情况下,我只能猜测其中注入了一些服务。在您的测试中,您应该能够提供该服务的模拟,然后配置该模拟以引发异常。
您应该能够注入类似以下内容的模拟内容:
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(HomeController.class)
public class HomeControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private YourService yourService;
Run Code Online (Sandbox Code Playgroud)
然后在测试中执行以下操作(我正在使用Mockito的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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10041 次 |
| 最近记录: |