30

有谁知道为 XSLT 转换编写单元测试的方法?

我有很多 XSLT 文件,手动测试它们变得越来越难。我们有一个示例 XML,可以将其与 XSL 转换生成的输出 XML 进行比较。但是,我正在寻找更好的测试方法。

4

7 回答 7

13

我目前也在寻找一些好的选择来做到这一点。结果,我遇到了这个问题,以及其他一些潜在的候选解决方案。诚然,我还没有尝试过它们中的任何一个,所以我不能谈论它们的质量,但至少它们是可能值得研究的其他一些途径。

  1. Jenni Tennison 的单元测试包
  2. UTF-X 单元测试框架
  3. 朱克西
  4. XTC

此外,我发现以下文章在单元测试 XSLT 的一般方法方面提供了丰富的信息。

单元测试 XSL 转换

于 2012-07-26T18:25:56.337 回答
9

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

于 2011-04-11T15:43:50.377 回答
3

看起来氧气编辑器也有单元测试可用。它“提供基于 XSpec 的 XSLT 单元测试支持”。

我自己还没有尝试过,但很快就会。

于 2013-08-02T06:14:51.527 回答
2

以下是一些简单的解决方案:

  • 将 xsltproc 与模拟 XML 文件一起使用:

    xsltproc test.xsl mock.xml
    
  • XSLT Cookbook - 第 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 脚本以编程方式在构建中内联数据,以完全自动化测试。

参考

于 2014-03-26T18:20:08.100 回答
1

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

org.custommonkey.xmlunit.Transform
org.custommonkey.xmlunit.Diff
org.custommonkey.xmlunit.DetailedDiff
于 2013-12-16T05:35:12.453 回答
1

试试 Jenni Tennison 的单元测试包 (XSpec),它是一个用于 XSLT、XQuery 和 Schematron 的单元测试和行为驱动开发 (BDD) 框架。它基于 RSpec 的 Spec 框架,RSpec 是 Ruby 的 BDD 框架。

使用 XSpec,您可以根据需要对 XLT 模板或 XPath 进行测试。有关如何使用/处理/编写(安装|执行)的概述,请单击https://github.com/xspec/xspec/wiki/What-is-XSpec

于 2018-11-12T06:39:41.400 回答
1

我正在使用这个工具: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 测试。只需将对该工具的调用添加为构建步骤即可。

于 2016-01-23T18:25:06.563 回答