如何进行反序列化的单元测试?

时间:2019-01-22 08:58:10

标签: scala unit-testing deserialization

我正在使用Scala中的库lift json将一些json配置反序列化为我的Config Case类。对于反序列化,我有一个名为Parser的类。它具有一个get方法,该方法尝试反序列化配置,如果成功,则返回scala.util.Success(Config),否则返回scala.util.Failure。我的问题是为Parser类编写单元测试的正确方法是什么?

  1. 我应该在测试数据中保留各种有效和无效的配置json,并仅根据get方法的结果断言isFailureisSuccess吗?
  2. 或者对于我拥有的每个测试json配置,我手动创建一个确切的Config类,然后声明isFailureisSuccess,如果isSuccess也声明该反序列化配置,则我手工创建的是一样的吗?

1 个答案:

答案 0 :(得分:2)

第一种方法显然是不够的:它可以通过所有测试,同时为Config提供错误的字段。

因此您需要第二个,但是当然只有有效的配置才存在Config,并且分别使用isEqual(Success(expectedConfig))而不是isSuccessisEqual会更简单(也许提取它的方法)。或者,如果您使用ScalaTest,请consider TryValues

这也是进行属性测试的一个很好的用例(ScalaCheck是最常见的Scala库):如果您还有序列化方法,请生成任意配置并进行测试

fromJson(config.toJson) == Success(config)