java - 如何使用 junit 测试 @RestController 的 @RequestBody?

标签 java spring spring-mvc junit spring-test

我想为我的一个 @RestController 编写一个简单的测试,并断言输入 @RequestBody 已正确映射到 PersonDTO >:

@RestController
public class PersonServlet {
    @PostMapping("/person") 
    public PersonRsp find(@RequestBody PersonDTO dto) {
        //business logic
    }
}

public class PersonDTO {
    private String firstname, lastname;
}

问题:如何将 JSON 请求正文发送到该 servlet。进一步检查 PersonDTO 字段,所有这些字段都已正确设置?

可能与此类似,但我不知道如何检查/监视已解析的 DTO?

@RunWith(SpringRunner.class)
@WebMvcTest(PersonSerlvet.class)
public class PersonTests {
    @Autowired
    private MockMvc mvc;

    @Test
    public void testExample() throws Exception {
        this.mvc.perform(get("/person"))
                .andExpect(status().isOk());
    }
}

@Duplicate 标记:这不是链接问题的重复(这是关于如何读取响应正文字符串)。我实际上要求进行请求正文测试。

最佳答案

测试 Json 到 DTO 的反序列化实际上并不是 Controller 的责任,您将测试底层对象映射器,它是一个外部库(Jackson、Gson ..??)

不确定正在使用哪个库,但如果您想测试它的使用情况,您需要以与应用程序框架类似的方式手动构建适当的对象映射器,并使用其 api 将 Json 字符串序列化为目标DTO

关于java - 如何使用 junit 测试 @RestController 的 @RequestBody?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183654/

相关文章:

java - Eclipse 中 pom.xml 中缺少 Artifact com.oracle :ojdbc5:jar:11. 2.0.1 错误

java - 如何将 javascript 添加到我的 InDesign Server Java Web 应用程序?

java - 使用 java 中另一个类的方法更新 jbutton 的 jlabel onclick

spring - 在Spring集成中编写没有xml配置的sftp入站和出站适配器

java - 适用于多种用户类型的 Spring Security 和 Hibernate

java - 无法将 Tomcat 与 solr 集成

java - 如何在 Thymeleaf 中动态替换片段?

java - 在我的 spring 静态资源上读取文件始终为 null

java - 在前端显示预下载处理

css - 为动态复选框放置适当的 CSS - Spring MVC