结合scalaxb与scalacheck

时间:2013-07-11 15:17:01

标签: scalacheck scalaxb

我想知道如何利用scalacheck对源自复杂xsds的scalaxb生成的类型进行scalacheck:

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

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

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

是否可行?

1 个答案:

答案 0 :(得分:1)

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

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

或者,从另一个角度来看,从任意案例类开始,将它们转换为XML文档,然后将其解析为案例类。我认为定义像The arbitrary Generator例子这样的案例类生成器会更直接:

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

例如,可以以相同的方式定义以下Arbitrary的{​​{1}}实例。

AddressType2Code

使用这些作为构建块,复杂类型的<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> 实例可以构造为Arbitrary

拥有implicit def arbTree[T]个实例的好处是,您可以继续使用它来测试业务逻辑代码,假装XML文档已经存在。