繁体   English   中英

XSLT 单元测试

[英]XSLT Unit testing

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

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

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

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

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

单元测试 XSL 转换

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

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

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

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

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

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

参考

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM