代码之家  ›  专栏  ›  技术社区  ›  k13i

MockMvcResultMatchers-jsonPath()vs content()

  •  0
  • k13i  · 技术社区  · 6 年前

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   dehasi    6 年前

    content() 当您的响应不是JSON时。例如,如果响应是纯文本。

    jsonPath() 例如

    • 你只需要检查一个特定的领域;

    • 你比较的是大/小,但不是精确匹配,

        2
  •  1
  •   Loïc Le Doyen    6 年前

    这取决于你操纵的有效载荷。

    如果有效负载短路 String 如果没有移动值(如日期等),可以使用纯文本比较,可以使用 hjson 提高可读性。

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

    JSON文件 内容,您可能需要使用一个专门的比较工具,如 JsonUnit 并将有效负载模板存储在文件中。

    很好,如果您是单元测试(如在每个方法的测试案例中),那么您测试的唯一对象 MockMvcResultMatchers#... 您的代码与 spring-mvc 习俗。