有没有办法为XSLT转换编写单元测试?
我有很多XSLT文件,手动测试它们越来越困难。我们有一个示例XML文件,可以将其与XSLT转换的输出XML进行比较。但是,我正在寻找更好的测试方法。
有没有办法为XSLT转换编写单元测试?
我有很多XSLT文件,手动测试它们越来越困难。我们有一个示例XML文件,可以将其与XSLT转换的输出XML进行比较。但是,我正在寻找更好的测试方法。
我目前正在寻找一些好的选择来完成这个任务。因此,我看到了这个问题和其他一些潜在的解决方案。诚然,我还没有尝试过它们中的任何一个,所以我不能评论它们的质量,但至少它们是一些值得研究的其他途径。
此外,我发现下面这篇文章在对 XSLT 进行单元测试的一般方法方面非常有用。
以下是几种简单的解决方案:
Use xsltproc with a mock XML file:
xsltproc test.xsl mock.xml
Create a document()
placeholder variable and comment/uncomment it manually:
<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>
Create a condition to swap the comment programmatically:
<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>
我正在使用这个工具: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测试。只需将调用该工具作为构建步骤添加即可。
org.custommonkey.xmlunit.Transform
org.custommonkey.xmlunit.Diff
org.custommonkey.xmlunit.DetailedDiff