用于匹配 json 的任何最高级匹配器

Any scalatest matchers for matching json

我的测试目前希望匹配来自被测方法的转换后的 json 字符串。我已经构建了一个预期的字符串来执行匹配。

val input = Foobar("bar", "foo")
val body = Foobar("bar !!", "foo!!")
val responseHeaders = Map[String, String]("Content-Type" -> "application/json")
val statusCode = "200"
val responseEvent = ResponseEvent(input, body, responseHeaders, statusCode)

val expected ="{\"input\":{\"foo\":\"bar\",\"bar\":\"foo\"},\"body\":{\"foo\":\"bar !!\",\"bar\":\"foo!!\"},\"headers\":{\"Content-Type\":\"application/json\"},\"statusCode\":\"200\"}"

val result = Main.stringifyResponse(responseEvent)

result should be(expected)

字符串匹配非常敏感,在任何空格上都会失败,而且任何在多行上写的字符串都不接受测试,因为使用 json4s 进行字符串化后,结果仅在一行中可用图书馆。

是否有更好的方法来对 json 输出执行匹配,而无需使用 scalatest 进行完整的字符串比较。

是否有更好的方法来创建此测试?

你有两个选择!

  1. 使用像 Play Json 这样的库,您可以将原始 Json 字符串装入 JsObject 并使用 Scalatest 进行检查。如果您已经在使用 JSON 库,看看您是否可以利用它!

  2. 将您的 JSON 装入箱子 class 并检查是否相等!

结帐https://github.com/stephennancekivell/scalatest-json

libraryDependencies += "com.stephenn" %% "scalatest-json-jsonassert" % "0.0.3"
libraryDependencies += "com.stephenn" %% "scalatest-json4s" % "0.0.2"
libraryDependencies += "com.stephenn" %% "scalatest-play-json" % "0.0.1"
libraryDependencies += "com.stephenn" %% "scalatest-circe" % "0.0.1"

它允许您编写测试而不关心空格,因为它 json。

    it("should pass matching json with different spacing and order") {
      val input = """
        |{
        | "some": "valid json",
        | "with": ["json", "content"]
        |}
      """.stripMargin

      val expected = """
                    |{
                    | "with": ["json", "content"],
                    |     "some":   "valid json"
                    |}
                  """.stripMargin

      input should matchJson(expected)
    }