Java MockMvcResultMatchers-jsonPath()与content()的比较
我正在使用Java MockMvcResultMatchers-jsonPath()与content()的比较,java,json,spring,spring-restcontroller,mockmvc,Java,Json,Spring,Spring Restcontroller,Mockmvc,我正在使用org.springframework.test.web.servlet.MockMvc对象测试SpringREST控制器。 我可以使用MockMvcResultMatchers.content()方法或接受Hamcrest matcher的MockMvcResultMatchers.jsonPath()方法验证响应JSON。我想知道哪种方法更好,最佳实践是什么?对于复杂的结构,Hamcrest matchers似乎很难阅读,而对于content(),长JSON必须外部化为单独的文件(
org.springframework.test.web.servlet.MockMvc
对象测试SpringREST控制器。
我可以使用
MockMvcResultMatchers.content()
方法或接受Hamcrest matcher的MockMvcResultMatchers.jsonPath()
方法验证响应JSON。我想知道哪种方法更好,最佳实践是什么?对于复杂的结构,Hamcrest matchers似乎很难阅读,而对于content()
,长JSON必须外部化为单独的文件(但这并不是什么大问题)。我应该选择一个选项而不是另一个,还是这完全是个人的事情?这取决于您操作的有效负载
如果有效负载是一个短的字符串
,没有移动值(如日期等),则可以使用纯文本比较,可以使用编写来提高可读性
另一方面,如果您必须测试复杂的有效负载,那么jsonPath是简化测试读取的好方法
在许多情况下,断言有效负载符合json模式就足够了,因为您的业务规则是在域包中测试的,所以您只需测试从业务对象到DTO的映射
在极少数情况下,您的大多数测试都是关于测试JSON内容的,您可能希望使用专门的比较工具,例如,将有效负载模板存储在文件中
总之,如果您是单元测试(如在每个方法的测试案例中),那么您使用MockMvcResultMatchers.
进行测试的唯一一件事就是将您的代码与spring mvc
约定相集成。当您的响应不是JSON时,您可以使用content()
。即,如果响应是纯文本
jsonPath()
为您提供了更多检查响应的机会。
比如说
- 您只需检查特定字段
- 您需要检查json数组,但不关心排序
- 您可以比较大/小,但不是精确匹配