MockMvcResultMatchers - jsonPath()vs content()

问题描述 投票:0回答:2

我正在使用org.springframework.test.web.servlet.MockMvc对象测试Spring REST控制器。我可以使用MockMvcResultMatchers.content()方法或接受Hamcrest匹配器的MockMvcResultMatchers.jsonPath()方法验证响应JSON。我想知道哪种方法更好,哪种方法最好?由于复杂的结构,Hamcrest匹配器似乎很难阅读,并且使用content(),长JSON必须外部化为单独的文件(但这不是什么大不了的恕我直言)。我应该选择另一种选择,还是完全属于个人用途?

java json spring spring-restcontroller mockmvc
2个回答
1
投票

当您的响应不是JSON时,您可以使用content()。即如果回复是纯文本。

jsonPath()为您提供更多机会来检查响应。例如

  • 你只需要检查一个特定的字段;
  • 你需要检查json-array,但你不关心订购;
  • 你比较更大/更小,但不完全匹配,

1
投票

这取决于您正在操纵的有效负载。

如果有效载荷是一个没有移动值的短String(如日期等),您可以使用明文比较,也可以使用hjson编写以提高可读性。

另一方面,如果必须测试复杂的有效负载,jsonPath是一种简化测试阅读的好方法。

在许多情况下,声明有效负载符合您的json模式就足够了,因为您的业务规则在域包中进行了测试,因此您只需测试从业务对象到DTO的映射。

在极少数情况下,大多数测试都是关于测试JSON内容,您可能希望使用JsonUnit等专用比较工具和文件中的存储有效内容模板。

好的,如果你是单元测试(如在每个方法的测试中),你使用MockMvcResultMatchers#...测试的唯一事情是你的代码与spring-mvc约定的集成。

© www.soinside.com 2019 - 2024. All rights reserved.