【问题标题】:combining scalaxb with scalacheck结合 scalaxb 与 scalacheck
【发布时间】:2013-07-11 15:17:00
【问题描述】:

我想知道如何在 scalaxb 生成的类型上使用 scalacheck,这些类型源自像这样的复杂 xsd:

http://wiki.xmldation.com/@api/deki/files/379/=pain.001.001.03.xsd

实际文件类似于付款,我想以一种或其他方式限制测试数据(帐户所有者/号码、金额、国家/地区)。

要测试的实际组件是:xml-parsers 检查语法并生成错误消息,xml-parsers 将文档解析为类似记录的数据结构,xml-printers 编写此类文档。

可行吗?

【问题讨论】:

    标签: scalacheck scalaxb


    【解决方案1】:

    检查 scalaxb 生成的案例类和类型类实例的有效性的一种方法是进行往返。它并不完美,但它应该测试类的一致性。

    例如,您可以从 XML 文档开始,将其解析为案例类,然后再次将其转回 XML 文档。为此,您需要定义一个涵盖各种场景的生成器。

    或者,换一种方式,从任意案例类开始,将它们转换为 XML 文档,然后将其解析回案例类。我认为像The arbitrary Generator 示例这样定义案例类生成器会更直接:

    implicit lazy val arbBool: Arbitrary[Boolean] = Arbitrary(oneOf(true, false))
    

    例如,可以用相同的方式定义以下AddressType2CodeArbitrary 实例。

    <xs:simpleType name="AddressType2Code">
      <xs:restriction base="xs:string">
        <xs:enumeration value="ADDR"/>
        <xs:enumeration value="PBOX"/>
        <xs:enumeration value="HOME"/>
        <xs:enumeration value="BIZZ"/>
        <xs:enumeration value="MLTO"/>
        <xs:enumeration value="DLVY"/>
      </xs:restriction>
    </xs:simpleType>
    

    使用这些作为构建块,可以像 implicit def arbTree[T] 一样构造复杂类型的 Arbitrary 实例。

    拥有Arbitrary 实例的好处是,您可以继续使用它测试您的业务逻辑代码,假装XML 文档已经存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2011-11-27
      相关资源
      最近更新 更多