2011-04-11 78 views
21

有人知道是否有方法可以为XSLT转换编写单元测试。我有很多XSLT文件,并且越来越难以手动测试它们。我知道我们可以有一个示例XML并将其与XSLT的输出进行比较,但我正在寻找更好的方法来测试它们。XSLT单元测试

谢谢...

回答

5

尝试XSpec,XSLT的一个测试框架。它允许您以声明方式编写测试,并测试模板和函数。

+0

如何使用XSpec测试特定模式下的转换? – 2016-01-18 10:48:06

12

我目前正在寻找一些很好的选择来做到这一点。因此,我遇到了这个问题,以及其他一些潜在的候选解决方案。无可否认,我还没有尝试过其中的任何一个,所以我不能说出它们的质量,但至少它们是可能值得研究的其他途径。

  1. Jenni Tennison's Unit Testing Package
  2. UTF-X Unit Testing Framework
  3. Juxy
  4. XTC

此外,我发现下面的文章,以翔实的单元测试XSLT的一般方法的条款。

Unit test XSL transformations

+0

有没有更新?你有尝试过吗? – 2014-08-28 12:41:22

+0

不幸的是,在我开始研究它之后不久,我的工作就将这项任务放在了工作上,我从未有机会重新审视它。 – Scott 2014-09-04 15:57:23

0

我们一直在使用基于Java的单元测试用例,其中我们在转换后提供预期的xml字符串,并输入需要使用某些XSL转换的xml字符串。 如果您想要了解更多信息,请参阅以下软件包。

org.custommonkey.xmlunit.Transform 
org.custommonkey.xmlunit.Diff 
org.custommonkey.xmlunit.DetailedDiff 
1

这里有几个简单的解决方案:

  • 使用xsltproc的一个模拟的XML文件:

    xsltproc test.xsl mock.xml 
    
  • XSLT Cookbook - Chapter 13

  • 创建document()占位符变量和评论/手动取消注释:

    <xsl:variable name="Data" select="descendant-or-self::node()"/> 
    <!-- 
    <xsl:variable name="Data" select="document('foo.xml')" /> 
    --> 
    <xsl:if test="$Data/pagename='foo'"> 
        <p>hi</p> 
    </xsl:if> 
    
  • 创造条件以编程方式交换意见:

    <xsl:variable name="Data"> 
         <xsl:choose> 
         <!-- If source XML is inline --> 
         <xsl:when test="descendant-or-self::node()/pageName='foo'"/> 
         <xsl:value-of select="descendant-or-self::node()"/> 
         </xsl:when> 
         <!-- If source XML is external --> 
         <xsl:otherwise> 
         <xsl:value-of select="document('foo.xml')" /> 
         </xsl:otherwise> 
         </xsl:choose> 
        </xsl:variable>    
    

使用shell脚本编程内联数据在生成的测试完全自动化。

参考

0

I'm:jxsltunit

测试由一个XML文件定义,然后传递给该工具。这是测试配置的一个示例:

<xsltTestsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="jxsltunit jxslttestsuite.xsd" xmlns="jxsltunit" 
    description="Testsuite Test" 
    xml="min-test.xml" 
    xslt="min-test.xslt" 
    path="pa > ch"> 
    <xsltTestcase match_number="0"> 
     <![CDATA[<ch>child 1</ch>]]> 
    </xsltTestcase> 
    <xsltTestcase match_number="1"> 
     <![CDATA[<ch>child 2</ch>]]> 
    </xsltTestcase> 
</xsltTestsuite> 

它需要XML,XSL和经过测试的转换XML中的路径。该路径可以包含一个列表,其中的元素由其索引标识。

此工具的一个好处是它可以输出结果作为junit XML文件。 Jenkins可以找到该文件,以在您的测试结果中显示XLST测试。只需将该调用添加到构建步骤。