Объединение scalaxb с scalacheck
Интересно, как я мог бы использовать scalacheck для типов, генерируемых scalaxb, происходящих из сложных xsds, таких как этот:
http://wiki.xmldation.com/@api/deki/files/379/=pain.001.001.03.xsd
Фактические документы напоминают платежи, и я хочу ограничить тестовые данные тем или иным способом (владельцы счетов / номера, суммы, страны).
фактические компоненты для тестирования: xml-парсеры, проверяющие синтаксис и выдающие сообщения об ошибках, xml-парсеры, анализирующие документы в виде структуры данных, похожей на запись, xml-принтеры, пишущие такие документы.
Будет ли это возможно?
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 уже существует.