2013-07-11 24 views
1

结合scalaxb我不知道如何可以利用scalacheck的对scalaxb生成的类型从复杂的XSD所产生像这样的:与scalacheck

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

实际的文件类似于支付,我想限制测试 - 数据以一种或其他方式(账户所有者/数量,金额,国家)。

要测试的实际组件包括:xml解析器检查语法并生成错误消息,xml解析器将文档解析为类似记录的数据结构,xml打印机编写这些文档。

它可行吗?

回答

1

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

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

或者,换一种方式,从任意大小写的类开始,将它们转换为XML文档,并将其解析为大小写类。我认为这将是更简单的定义一样The arbitrary Generator例子案例类发生器:

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

例如,Arbitrary实例以下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]

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