簡體   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