微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala 测试问题

如何解决Scala 测试问题

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

case class MyModel(Point1: String,Point2: String,Point3: Option[NewModel] = None)


case class NewModel(Point4: Boolean,Point5: Boolean,Point6: Boolean)

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

    myModelViaJson.Point1 shouldBe ""
    myModelViaJson.Point3.head.point4 shouldBe true
    myModelViaJson.Point2 shouldBe ""
}

我在运行测试用例时遇到以下错误

should serialise/deserialize a MyModel to JSON *** Failed ***
[info]   spray.json.DeserializationException: Object expected in field 'point4'
[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)

如何解决这个问题?

解决方法

您的 JSON 将 Point3 的值设置为 [],这是一个空数组,但在 Scala 中它应该是一个 NewModel 对象(因此“预期对象”)。>

Option 中使用 MyModel 表示 JSON 中可能缺少该字段,在这种情况下,提取的值将是 None。如果 JSON 中存在 Point3 字段,则它应包含 NewModel 的 JSON,然后该字段将为 Some(<NewModel instance>)

,

只是为了详细说明@Tim 的正确答案。提供的 Json 与模型之间存在不兼容。 json 有 Point3 作为数组,而在 MyModel 中它是 Option[NewModel]。因此,第一个不能反序列化为后者。解决的方法有很多,看你想要什么了。

  1. 最简单的方法,从 Json 中删除 Point3

    val json= """{"Point1":"","Point2":""}""".parseJson
    val myModelViaJson= json.convertTo[MyModel]
    

    它将产生 MyModel(,None)

  2. 将 Json 更改为 NewModel

    val json= """{"Point1":"","Point3":{ "Point4": true,"Point5": true,"Point6": true },"Point2":""}""".parseJson
    val myModelViaJson= json.convertTo[MyModel]
    

    产生 MyModel(,Some(NewModel(true,true,true)))

  3. 如果你真的想在那里有数组,你可以改变 MyModel 类:

    case class MyModel(Point1: String,Point2: String,Point3: Option[Seq[NewModel]] = None)
    

    然后是:

    val json= """{"Point1":"","Point3":[],"Point2":""}""".parseJson
    val myModelViaJson= json.convertTo[MyModel]
    

    产生:MyModel(,Some(List()))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?