您可以检查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文档已经存在。