Модульное тестирование XSLT - PullRequest
25 голосов
/ 11 апреля 2011

Кто-нибудь знает способ написания модульных тестов для преобразования XSLT?

У меня много XSLT-файлов, и тестировать их вручную становится все труднее. У нас есть пример XML, и мы можем сравнить его с результирующим выходным XML из преобразования XSL. Тем не менее, я ищу лучший метод испытаний.

Ответы [ 7 ]

13 голосов
/ 26 июля 2012

Я сейчас ищу несколько хороших вариантов для этого. В результате я столкнулся с этим вопросом и несколькими другими потенциальными решениями. По общему признанию, я еще не пробовал ни одного из них, таким образом, я не могу говорить об их качестве, но по крайней мере они - некоторые другие пути, потенциально достойные исследования.

  1. Пакет модульного тестирования Дженни Теннисон
  2. Структура модульного тестирования UTF-X
  3. Juxy
  4. XTC

Кроме того, я нашел следующую статью информативной с точки зрения общей методологии модульного тестирования XSLT.

Модульный тест XSL-преобразований

6 голосов
/ 11 апреля 2011

Попробуйте XSpec , среду тестирования для XSLT. Он позволяет декларативно писать тесты, а также шаблоны и функции тестов.

3 голосов
/ 02 августа 2013

Похоже, что в редакторе Oxygen также доступно модульное тестирование. Он " обеспечивает поддержку модульного тестирования XSLT на основе XSpec ".

Я сам не пробовал, но скоро.

2 голосов
/ 26 марта 2014

Вот несколько простых решений:

  • Использование 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>              
    

Используйте сценарий оболочки, чтобы программно встроить данные в сборку, чтобы полностью автоматизировать тесты.

Ссылки

0 голосов
/ 12 ноября 2018

Попробуйте пакет модульного тестирования (XSpec) Дженни Теннисон, представляющий собой среду модульного тестирования и разработки на основе поведения (BDD) для XSLT, XQuery и Schematron.Он основан на спецификации Spec в RSpec, которая является платформой BDD для Ruby.

С XSpec вы можете протестировать шаблон XLT или XPath в соответствии с вашими потребностями.Для обзора того, как использовать / обрабатывать / писать (установка | выполнение), нажмите https://github.com/xspec/xspec/wiki/What-is-XSpec

0 голосов
/ 23 января 2016

Я использую этот инструмент: 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, который тестируется. Путь может содержать список элементов, идентифицированных по их индексу.

Одним из преимуществ этого инструмента является то, что он может выводить результаты в виде файла XML Junit. Этот файл может быть выбран вашим Jenkins для отображения XLST-тестов в результатах ваших тестов. Просто добавьте вызов инструмента в качестве шага сборки.

0 голосов
/ 16 декабря 2013

Мы использовали примеры модульных тестов на основе Java, в которых мы предоставляем ожидаемую строку xml после преобразования и вводим строку xml, которую необходимо преобразовать с использованием некоторого XSL. Обратитесь к следующему пакету, если вы хотите узнать больше.

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