java—如何使用预期的dto测试控制器返回的json?

j8yoct9x  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(230)

我使用spring test 5.0.7并进入下一期:
数据终端:

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class SomeDTO {
    private String uid;
    private Object child;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class AnotherDTO {
    private String someField;
}

控制器:

@RestController
@RequestMapping("/api")
public static class TestController {
    @GetMapping(path = "/dto/{uid}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public SomeDTO findSomeObject(@PathVariable String uid) {
        return new SomeDTO(uid, new AnotherDTO("value"));
    }
}

以及一个失败的测试:

@Test
public void testControllerResult() throws Exception {
    SomeDTO dto = new SomeDTO(UUID.randomUUID().toString(), new AnotherDTO("value"));

    mockMvc.perform(MockMvcRequestBuilders.get("/api/dto/{uid}", dto.getUid()))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andExpect(MockMvcResultMatchers.jsonPath("$").value(dto));
}

测试日志:

java.lang.AssertionError: JSON path "$" 
Expected :TestTest.SomeDTO(uid=7817869a-eb9a-4491-a34b-a8006a643b6c, child=TestTest.AnotherDTO(someField=value))
Actual   :null

有没有办法不指定字段类型就让它工作 SomeDTO.child ? 我想它不起作用,因为 SomeDTO 不提供有关字段的信息 child (我一到 private AnotherDTO child ,测试将通过),但可以在运行时进行计算。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题