模式(xsd)等价的回归测试

时间:2009-12-17 14:10:43

标签: xml validation xsd schema testing

我正在考虑将包含许多独立复杂类型的模式重写为一个复杂类型更合理地扩展其他基类型的模式。这个的基本原理部分是概念性的 - 因为大多数这些类型是具有明确层次结构的域对象的特定实例 - 并且部分实用,因为我们使用JAXB生成的类来处理XML读取逻辑并且不可能写入没有反射或大量instanceof和投射的常见功能的方法。的Bleh。

所以我的主要问题是,是否有人知道测试两个XSD架构的功能等效的好方法?如果我正确执行此模式重构,则认为有效的文档集对于两个模式应该完全相同,尽管文件本身会非常不同。这听起来像测试框架可以帮助的东西;我知道有些工具可以为JUnit测试提供测试输入,我想知道是否有任何工具可以生成边缘案例XML文档来测试旧模式和新模式的有效性?

顺便说一句 - 如果这是一个糟糕的想法(或者有更好的选择),那么现在就阻止我。 : - )

感谢您的关注。

2 个答案:

答案 0 :(得分:2)

经过一番调查后,我遇到了Liquid XML Sample Generator,这听起来就像我正在寻找的那种东西(尽管我不确定相当有多好这将用于测试边缘情况。)

我偶然发现了SUT: XML Schema Unit Test,它看起来不再被主动维护,或者有很好的文档记录,但是采用更加编程的方法来定义给定模式应该是有效的或无效的XML文档,以及测试这个。不幸的是,测试用例似乎是线性解释的,而不是像上面的XML样本生成器那样排列每个不同节点的可能性。因此,尽管可以实施更好的覆盖,但这可能需要做很多工作。

所以至少我看起来似乎是一个可行的后备 - 从旧模式生成一堆文档,然后根据新模式验证它们,反之亦然。它不是决定性的(好吧,单元测试从来都不是)但是在每个方向上运行几百或几千个测试应该给出一些非常好的信心,即模式是等价的。

我仍然很高兴能够提供一个优雅的测试解决方案,但是经过一个小时的谷歌搜索后,我并没有抱太大希望存在这样的问题。

答案 1 :(得分:2)

这个问题没有一般的答案,因为两个无上下文语法是否相同的问题是不可判定的。请参阅this wikipedia page

在这方面已经做了一些理论工作,但是没有任何工具可以为您提供现成的工具。

如果您对如何设计架构做出某些假设(禁止匿名类型,命名约定等),可以解决此问题。然后你就可以使用像eclipse XSD这样的库(它可以在独立应用程序中的eclipse外工作)来进行比较。

最后,这是一个link to a research paper,可以更详细地讨论这个问题。