【问题标题】:How should unit testing for desrialization be done?应该如何进行反序列化的单元测试?
【发布时间】:2019-01-22 21:47:54
【问题描述】:

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

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

【问题讨论】:

    标签: scala unit-testing deserialization


    【解决方案1】:

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

    所以你需要第二个,但当然 Config 只存在于有效配置中,并且单独使用 isEqual(Success(expectedConfig)) 而不是 isSuccessisEqual 会更简单(可能将其提取到方法中)。或者,如果您使用 ScalaTest,consider TryValues

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

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

    【讨论】:

    • 谢谢,真的很喜欢属性测试+1的想法。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多