如何使用scala中的json4s库测试我为解析器创建的案例类是否正确?

时间:2016-03-06 12:32:37

标签: json scala parsing testing json4s

我有一个巨大的json对象,我需要解析它,然后写一些测试,看看是否一切都按预期进行。

case class User(id: Identification, age:Int, name: String ...)
case class Identification(id: Int, hash: String ....)
... a lot more classes

现在我正在尝试编写测试

val json = parse(Source.fromFile(/path).getLines.mkString("\n"))
import org.json4s.DefaultFormats
implicit val formats = DefaultFormats

所以我的问题是如何测试案例类是否合适? 我想也许我应该尝试提取前。用户,然后按参数检查参数是否正确,但我不是一个好方法,因为创建json的不是我,所以我对内容不感兴趣。

由于

1 个答案:

答案 0 :(得分:2)

这是我发现使用JSON和案例类超过测试的最小年份。

应该始终测试这三件事

与deserialiaztion组合的序列化

val example = MyCaseClass()
read[MyCaseClass](write(example)) should Equal example

检查一个类是否可以转换为JSON,读回并仍然具有相同的值。这个比人们想象的更容易打破。

反序列化:JSON String - > CaseClasses

val exampleAsJSON : String
val exampleAsCaseClass : MyCaseClass

read(exampleAsJSON) shouldEqual exampleAsCaseClass

检查JSON是否仍然可以反序列化。

序列化:CaseClasses - > JSON String

 val exampleAsJSON : String
 val exampleAsCaseClass : MyCaseClass

 write(exampleAsCaseClass) shouldEqual exampleAsJSON

检查String / JSON表示是否保持稳定。这里很难保持数据的最新状态,而且通常一些不太好的空白变化会导致误报。

要测试的其他内容

是否存在optional个参数?如果是,所有测试都应该在有和没有可选参数的情况下完成。