springboot单元测试controller具体代码案例
时间: 2023-07-06 18:34:40 浏览: 96
好的,以下是一个简单的 Spring Boot 单元测试 controller 的示例代码:
假设我们有一个 UserController 类,其中有一个方法 getUserById,用于根据用户 ID 查询用户信息。我们可以编写一个 UserControllerTest 类,来测试这个方法。
UserController 类代码:
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
}
```
UserControllerTest 类代码:
```java
@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserService userService;
@Test
public void testGetUserById() throws Exception {
// 准备测试数据
User user = new User();
user.setId(1L);
user.setUsername("test");
user.setPassword("test123");
user.setAge(18);
// 设置 userService 的行为
when(userService.getUserById(1L)).thenReturn(user);
// 发送 GET 请求
mockMvc.perform(get("/users/1"))
// 验证返回状态码
.andExpect(status().isOk())
// 验证返回数据
.andExpect(jsonPath("$.id").value(user.getId()))
.andExpect(jsonPath("$.username").value(user.getUsername()))
.andExpect(jsonPath("$.password").value(user.getPassword()))
.andExpect(jsonPath("$.age").value(user.getAge()));
}
}
```
该测试类使用了 @RunWith(SpringRunner.class) 注解来指定使用 SpringRunner 来运行测试,并使用了 @WebMvcTest(UserController.class) 注解来指定需要测试的 controller 类。
在测试方法中,我们首先使用 Mockito 的 @MockBean 注解来创建一个 UserService 的 mock 对象,然后通过 when(userService.getUserById(1L)).thenReturn(user) 来设置 mock 对象的行为。
接下来,我们使用 MockMvc 发送 GET 请求,并通过 andExpect() 方法来验证返回状态码和返回数据。在这个例子中,我们使用了 jsonPath() 方法来验证返回的 JSON 数据。
需要注意的是,该测试类并没有启动整个 Spring Boot 应用程序,而是只启动了一个 mock servlet 容器,这样测试效率会更高。
希望这个示例能够帮到你。
阅读全文