我想知道如何在由scalaxb生成的类型上使用scalacheck,这些类型来自像下面这样的复杂xsd:
http://wiki.xmldation.com/@api/deki/files/379/=pain.001.001.03.xsd
实际的文档类似于支付,我想以一种或另一种方式限制测试数据(帐户所有者/编号,金额,国家)。
要测试的实际组件是:xml解析器检查语法并生成错误消息,xml解析器将文档解析为类似记录的数据结构,xml打印机编写此类文档。
这可行吗?
发布于 2013-07-12 05:27:19
检查scalaxb生成的case类和类型类实例的有效性的方法之一是进行往返。它不是完美的,但它应该测试类的一致性。
例如,您可以从XML文档开始,将其解析为case类,然后再将其转换回XML文档。为此,您需要定义一个涵盖各种场景的生成器。
或者,采用另一种方法,从任意case类开始,将其转换为XML文档,然后将其解析回case类。我认为定义case类生成器会更简单,比如The arbitrary Generator示例:
implicit lazy val arbBool: Arbitrary[Boolean] = Arbitrary(oneOf(true, false))例如,可以以相同的方式定义以下AddressType2Code的Arbitrary实例。
<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实例的好处是,您可以继续使用它测试业务逻辑代码,假装该文档已经存在。
https://stackoverflow.com/questions/17597267
复制相似问题