2011-04-11 64 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測試。只需將該調用添加到構建步驟。