2013-07-11 85 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文檔已經存在。