MockMvcResultMatchers - jsonPath() 与 content()
MockMvcResultMatchers - jsonPath() vs content()
我正在使用 org.springframework.test.web.servlet.MockMvc
对象测试 Spring REST 控制器。
我可以使用接受 Hamcrest 匹配器的 MockMvcResultMatchers.content()
方法或 MockMvcResultMatchers.jsonPath()
方法验证响应 JSON。我想知道哪种方法更好,最佳做法是什么?由于结构复杂,Hamcrest 匹配器似乎真的很难阅读,并且对于 content()
,长 JSON 必须外部化到单独的文件(但这没什么大不了恕我直言)。我应该更喜欢一个选项还是完全个人的事情?
这取决于您正在操纵的负载。
如果负载很短 String
,没有移动值(如日期等),您可以使用明文比较,可能使用 hjson 编写以提高可读性。
另一方面,如果您必须测试复杂的有效负载,json路径是简化测试阅读的好方法。
在许多情况下,断言负载符合您的 json-schema 就足够了,因为您的业务规则是在您的域包中测试的,所以您只需要测试从业务对象到DTO.
在极少数情况下,您的大部分测试都是关于测试 JSON 内容的,您可能需要使用专门的比较工具,例如 JsonUnit并将负载模板存储在文件中。
好吧,如果您正在进行单元测试(如在每个方法案例中的测试),那么您唯一使用 MockMvcResultMatchers#...
进行测试的是您的代码与 spring-mvc
约定的集成。
当您的回答不是 JSON 时,您可以使用 content()
。 IE。如果响应是纯文本。
jsonPath()
让您有更多机会检查回复。
例如
您只需要检查一个特定的字段;
你需要检查json-数组,但你不关心顺序;
你比较greater/less,但不是完全匹配,
我正在使用 org.springframework.test.web.servlet.MockMvc
对象测试 Spring REST 控制器。
我可以使用接受 Hamcrest 匹配器的 MockMvcResultMatchers.content()
方法或 MockMvcResultMatchers.jsonPath()
方法验证响应 JSON。我想知道哪种方法更好,最佳做法是什么?由于结构复杂,Hamcrest 匹配器似乎真的很难阅读,并且对于 content()
,长 JSON 必须外部化到单独的文件(但这没什么大不了恕我直言)。我应该更喜欢一个选项还是完全个人的事情?
这取决于您正在操纵的负载。
如果负载很短 String
,没有移动值(如日期等),您可以使用明文比较,可能使用 hjson 编写以提高可读性。
另一方面,如果您必须测试复杂的有效负载,json路径是简化测试阅读的好方法。
在许多情况下,断言负载符合您的 json-schema 就足够了,因为您的业务规则是在您的域包中测试的,所以您只需要测试从业务对象到DTO.
在极少数情况下,您的大部分测试都是关于测试 JSON 内容的,您可能需要使用专门的比较工具,例如 JsonUnit并将负载模板存储在文件中。
好吧,如果您正在进行单元测试(如在每个方法案例中的测试),那么您唯一使用 MockMvcResultMatchers#...
进行测试的是您的代码与 spring-mvc
约定的集成。
当您的回答不是 JSON 时,您可以使用 content()
。 IE。如果响应是纯文本。
jsonPath()
让您有更多机会检查回复。
例如
您只需要检查一个特定的字段;
你需要检查json-数组,但你不关心顺序;
你比较greater/less,但不是完全匹配,