1

次のような複雑な xsds から生じる scalaxb によって生成された型で scalacheck をどのように利用できるのだろうか。

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

実際のドキュメントは支払いに似ており、テストデータを何らかの方法 (アカウント所有者/番号、金額、国) で制限したいと考えています。

テストする実際のコンポーネントは、構文をチェックしてエラー メッセージを生成する xml パーサー、ドキュメントをレコードのようなデータ構造に解析する xml パーサー、そのようなドキュメントを書き込む xml プリンターです。

それは実現可能でしょうか?

4

1 に答える 1

1

scalaxb で生成されたケース クラスと型クラス インスタンスの有効性を確認する方法の 1 つは、ラウンドトリップを行うことです。完璧ではありませんが、クラスの一貫性をテストする必要があります。

たとえば、XML ドキュメントから開始してケース クラスに解析し、再び XML ドキュメントに戻すことができます。そのためには、さまざまなシナリオをカバーするジェネレーターを定義する必要があります。

または、逆に、任意のケース クラスから始めて、それらを XML ドキュメントに変換し、解析してケース クラスに戻します。任意のジェネレーターの例のようなケース クラス ジェネレーターを定義する方が簡単だと思います。

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 ドキュメントが既に存在するかのように、それを使用してビジネス ロジック コードをテストできることです。

于 2013-07-11T21:27:18.760 に答える