java 如何在MockMvc junit测试中将@RestController的ResponseBody作为对象获取?

bluesky1年前 ⋅ 241 阅读

ChatGPT的回答仅作参考:

在MockMvc junit测试中,可以使用MockMvcResultHandlers.print()方法打印出响应结果,然后使用Jackson库将响应结果转换为对象。

例如,假设有一个@RestController类如下:

```
@RestController
public class UserController {

    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        User user = new User();
        user.setId(id);
        user.setName("John");
        return user;
    }
}
```

可以使用MockMvc进行测试:

```
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetUser() throws Exception {
        MvcResult result = mockMvc.perform(get("/users/1"))
                .andExpect(status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();

        ObjectMapper objectMapper = new ObjectMapper();
        User user = objectMapper.readValue(result.getResponse().getContentAsString(), User.class);

        assertEquals(1L, user.getId().longValue());
        assertEquals("John", user.getName());
    }
}
```

在上面的测试中,使用MockMvc执行GET请求,并使用MockMvcResultHandlers.print()方法打印出响应结果。然后使用ObjectMapper将响应结果转换为User对象,并进行断言。

全部评论: 0

    相关推荐