使用spray json scala 测试序列化/反序列化模型

问题描述

我是 Scala 的新手,我使用 Scala 测试和喷雾 json 编写测试用例。我的代码如下。

case class MyModel(Point1: String,Point2: String,Point3: Seq[String],Point4: Seq[String])

  it should "serialise/deserialize a MyModel to JSON" in {
    val json= """{"Point1":"","Point3":[],"Point2":"","Point4":[]}""".parseJson
    val myModelViaJson= json.convertTo[MyModel]

    myModelViaJson.Point1 shouldBe ""
    myModelViaJson.Point3.isEmpty shouldBe true
    myModelViaJson.Point2 shouldBe ""
    myModelViaJson.Point4.isEmpty shouldBe true
  }

在进行 sbt 测试时出现以下错误

 should serialise/deserialize a MyModel to JSON *** Failed ***
[info]   spray.json.DeserializationException: Expected String as Jsstring,but got []
[info]   at spray.json.package$.deserializationError(package.scala:23)
[info]   at spray.json.ProductFormats.fromField(ProductFormats.scala:63)
[info]   at spray.json.ProductFormats.fromField$(ProductFormats.scala:51)

如何解决这个问题?

解决方法

在解析前添加 val myModelViaJson= json.convertTo[MyModel]

参考:jsonformats-for-case-classes

所以,代码看起来像

val json= """{"Point1":"","Point3":[],"Point2":"","Point4":[]}""".parseJson
implicit val format = jsonFormat4(MyModel)
val myModelViaJson= json.convertTo[MyModel]

myModelViaJson.Point1 shouldBe ""
myModelViaJson.Point3.isEmpty shouldBe true
myModelViaJson.Point2 shouldBe ""
myModelViaJson.Point4.isEmpty shouldBe true