Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MockMvcResultMatchers-jsonPath()与content()的比较_Java_Json_Spring_Spring Restcontroller_Mockmvc - Fatal编程技术网

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数组,但不关心排序

  • 您可以比较大/小,但不是精确匹配