Spring boot 测试返回响应实体的控制器

Spring boot 测试返回响应实体的控制器,spring-boot,model-view-controller,junit,entity,response,Spring Boot,Model View Controller,Junit,Entity,Response,我有一个控制器,它接受post请求并返回带有主体的响应实体 @RestController public class UserController { @Autowired private UserService UserService; @RequestMapping(value = "/all", method = POST,consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity&l

我有一个控制器,它接受post请求并返回带有主体的响应实体

@RestController
public class UserController {
    @Autowired
    private UserService UserService;
    @RequestMapping(value = "/all", method = POST,consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<List<ResponseUser>> navigationTree(@RequestBody(required=false) UserDataRequest request) {
        return UserService.sendEntries(request);
    }
}
我想将响应正文中接收的字符串与预期的字符串进行比较

我尝试了字符串比较,但不起作用 错误:

    assertThat(Objects.equals(expectedJson, actualJson)).isTrue();
而实际上JSON是空的

还有哪些方法?

在执行this.mockMvc.perform之前,您需要模拟UserService以返回一些内容。大概是这样的:

when(UserServiceMock.sendEntries(null)).thenReturn(expectedResponceEntity);

因此,只需构造预期的响应,然后模拟UserService来返回它

首先解释一下不工作。。请粘贴实际JSON和结果。可以使用.jsonPath比较各个值,但不确定是否可以比较整个json。检查这个问题。对于ResonSet entity.jsonpath不工作,它正在工作。但是,为什么我们要模拟用户服务呢?您不必模拟它,但您确实用@MockBean行模拟了它。如果你不想嘲弄它,但仍然要做一个调整,那么就考虑“SPYBEN”。使用@SpyBean,您可以保留mock选项,而无需实际执行,并且仍然可以对其进行验证。
when(UserServiceMock.sendEntries(null)).thenReturn(expectedResponceEntity);