检查 scalaxb 生成的案例类和类型类实例的有效性的一种方法是进行往返。它并不完美,但它应该测试类的一致性。
例如,您可以从 XML 文档开始,将其解析为案例类,然后再次将其转回 XML 文档。为此,您需要定义一个涵盖各种场景的生成器。
或者,换一种方式,从任意案例类开始,将它们转换为 XML 文档,然后将其解析回案例类。我认为像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 实例的好处是,您可以继续使用它测试您的业务逻辑代码,假装XML 文档已经存在。