我的测试目前希望匹配测试中的方法转换的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进行完整的字符串比较。
有没有更好的方法来创建此测试?
答案 0 :(得分:1)
你有两个选择!
使用像Play Json这样的库,您可以将原始Json字符串打包到JsObject中,并使用Scalatest进行检查。如果您已经使用了JSON库,请查看是否可以利用它!
将您的JSON装入案例类并检查是否相等!
答案 1 :(得分:0)
结帐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)
}