Подтвердить что ты не робот

Тестирование модуля XSLT

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

Спасибо...

4b9b3361

Ответ 1

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

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

Unit test Преобразования XSL

Ответ 2

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

Ответ 4

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

  • Используйте xsltproc с файлом mock 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>              
    

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

Ссылки

Ответ 5

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

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

Ответ 6

Я использую этот инструмент: 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-тесты в результатах теста. Просто добавьте вызов инструмента в качестве шага сборки.