以下是关于Spring MockMvc的完整攻略。
Spring MockMvc基本原理
Spring MockMvc是Spring MVC中的一个测试框架,用于模拟HTTP请求和响应。它允许我们不启动服务器的情况下测试控器的行为。Spring MockMvc的步如下:
- 创建MockMvc对象
- 发送HTTP
- 验证HTTP响应
下面将细说明每步。
步骤1:创建MockMvc对象
在使用Spring MockMvc之前,需要先创建MockMvc对象。可以使用以下示例:
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, World!"));
}
}
在上面的示例中,我们创建了一个HelloControllerTest类,并使用@RunWith和@WebMvcTest注解将其标记为测试类。在类中,我们使用@Autowired注解注入了一个MockMvc对象。
步骤2:发送HTTP请求
在创建MockMvc之,就可以发送HTTP请求了。可以使用以下示例:
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, World!"));
}
}
在上面的示例中,我们使用perform()方法发送了一个GET请求,并将其映射到/hello路径。
步骤3:验证响应
在发送HTTP请求之后,就需要验证HTTP响应了。可以使用以下示例:
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, World!"));
}
}
在上面的示例中,我们使用andExpect()方法验证HTTP响应。在示例中,验证HTTP响应的状态码为200,并且响应内容为"Hello World!"。
示例
下面是两个使用Spring MockMvc的示例:
示例1:使用Spring MockMvc测试控制器
在这个示例中,我们将使用Spring MockMvc测试控制器。
HelloController.java
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在上面的示例中,我们创建了一个HelloController类,并使用@RestController注解将其标记为控制器。在类中,我们创建了一个hello()方法,并使用@GetMapping注解将其映射到/hello路径。
HelloControllerTest.java
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, World!"));
}
}
在上面的示例中,我们创建了一个HelloControllerTest类,并使用@RunWith和@WebMvcTest注解将其标记为测试类。在类中,我们@Autowired注解注入了一个MockMvc对象,并编写了一个testHello()方法。在方法中,我们使用perform()方法发送了一个GET请求,并将其映射到/hello路径。我们还使用andExpect()方法验证HTTP响应。
示例2:使用Spring MockMvc测试表单
在这个示例中,我们将 MockMvc测试表单。
UserController.java
@Controller
public class UserController {
@GetMapping("/user")
public String userForm(Model model) {
model.addAttribute("user", new User());
return "user";
}
@PostMapping("/user")
public String userSubmit(@ModelAttribute User user) {
return "result";
}
}
在上面的示例中,我们创建了一个UserController类,并使用@Controller注解将其标记为控制器。在类中,我们创建了一个userForm(),并使用@GetMapping注解将其映射到/user路径。在方法中,我们将一个空的User对象添加到模型,并返回user视图。我们还创建了一个userSubmit()方法,并使用@PostMapping注解将其映射到/user路径。在方法中,我们接收User对象,并返回result视图。
User.java
public class User {
private String name;
String email;
// getters and setters
}
在上面的示例中,我们创建了一个User类,并添加了name和email属性以及相应的getter和setter方法。
user.html
html