Модульное тестирование XSLT
Кто-нибудь знает способ написания модульных тестов для преобразования XSLT?
У меня много XSLT-файлов, и проверять их вручную становится все труднее. У нас есть пример XML, и мы можем сравнить его с результирующим выходным XML из преобразования XSL. Тем не менее, я ищу лучший метод испытаний.
7 ответов
В настоящее время я ищу несколько хороших вариантов для этого. В результате я столкнулся с этим вопросом и несколькими другими потенциальными вариантами решения. По общему признанию, я еще не пробовал ни одного из них, таким образом, я не могу говорить об их качестве, но по крайней мере они - некоторые другие пути, потенциально достойные исследования.
Кроме того, я нашел следующую статью информативной с точки зрения общей методологии модульного тестирования XSLT.
Похоже, что в редакторе Oxygen также доступно модульное тестирование. Он " обеспечивает поддержку модульного тестирования XSLT на основе XSpec".
Я сам не пробовал, но скоро буду.
Вот несколько простых решений:
Используйте xsltproc с фиктивным XML-файлом:
xsltproc test.xsl mock.xml
Создать
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>
Используйте сценарий оболочки, чтобы программно встроить данные в сборку, чтобы полностью автоматизировать тесты.
Рекомендации
Building TransforMiiX standalone - Архив устаревшего контента | MDN
Использование XSLT для содействия регрессионному тестированию
MicroHowTo: обработка документа XML с использованием таблицы стилей XSLT
Встроенные модули таблиц стилей: XSL Transformations (XSLT) версия 3.0
XMLStarlet командная строка XML Инструментарий скачать | SourceForge.net
Я использую этот инструмент: 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-тестов в результатах ваших тестов. Просто добавьте вызов к инструменту в качестве шага сборки.
Попробуйте пакет модульного тестирования (XSpec) Дженни Теннисон, который представляет собой платформу для модульного тестирования и разработки на основе поведения (BDD) для XSLT, XQuery и Schematron. Он основан на спецификации Spec в RSpec, который является платформой BDD для Ruby.
С XSpec вы можете протестировать шаблон XLT или XPath в соответствии с вашими потребностями. Чтобы узнать, как использовать / обрабатывать / писать (установка | выполнение), нажмите https://github.com/xspec/xspec/wiki/What-is-XSpec
Мы использовали примеры модульных тестов на основе Java, в которых мы предоставляем ожидаемую строку xml после преобразования и вводим строку xml, которую необходимо преобразовать с использованием некоторого XSL. Обратитесь к следующему пакету, если вы хотите узнать больше.
org.custommonkey.xmlunit.Transform
org.custommonkey.xmlunit.Diff
org.custommonkey.xmlunit.DetailedDiff