首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将scalaxb与scalacheck相结合

将scalaxb与scalacheck相结合
EN

Stack Overflow用户
提问于 2013-07-11 23:17:01
回答 1查看 245关注 0票数 1

我想知道如何在由scalaxb生成的类型上使用scalacheck,这些类型来自像下面这样的复杂xsd:

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

实际的文档类似于支付,我想以一种或另一种方式限制测试数据(帐户所有者/编号,金额,国家)。

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

这可行吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-12 05:27:19

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

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

或者,采用另一种方法,从任意case类开始,将其转换为XML文档,然后将其解析回case类。我认为定义case类生成器会更简单,比如The arbitrary Generator示例:

代码语言:javascript
复制
implicit lazy val arbBool: Arbitrary[Boolean] = Arbitrary(oneOf(true, false))

例如,可以以相同的方式定义以下AddressType2CodeArbitrary实例。

代码语言:javascript
复制
<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实例的好处是,您可以继续使用它测试业务逻辑代码,假装该文档已经存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17597267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档