У меня есть некоторые все больше сложные таблицы стилей XSLT, и было бы полезно, если я мог бы запустить некоторые тесты на них как часть моего процесса сборки CI и даже использовать TDD для разработки их во-первых. Я в настоящее время использую Visual Studio для выполнения фрагментов XML через таблицы стилей, и я вручную проверяю результаты.
Что все рекомендовали бы для этого? Идеально было бы легко интегрироваться в CruiseControl.NET и/или MsBuild.
Я использовал свою стандартную систему модульного тестирования с хорошей библиотекой для тестирования вывода. В моем текущем проекте выводом является XHTML, и я использую JUnit и xml-unit. В предыдущем проекте на выходе был XSL-FO, и я использовал python-unit и xmllib. Это позволяет мне создавать XSLT постепенно (с использованием TDD), имея единственную тестовую проверку только части вывода. Однако, если на выходе получается текст, я мог бы сравнить результат целиком. Я использовал свое текущее программное обеспечение для модульного тестирования по двум причинам. Во-первых, я был с ним знаком, поэтому начать работу было быстрее. Во-вторых, было очень легко автоматизировать тестирование с помощью сборки, если она уже использовала тип теста, которого ожидала сборка.
Думаю, я бы написал для них модульные тесты на выбранном вами языке программирования (например, C#). Иметь коллекцию входных xmls и соответствующих ожидаемых выходов и просто запустить xsl на них и убедиться, что они соответствуют выходам. Я не уверен, что есть более разумный способ тестирования.
See:
http://www.jenitennison.com/xslt/utilities/unit-testing/
and:
http://nwalsh.com/docs/presentations/xml2005/slides.pdf
and:
Я работаю над проектом, который использует XSL-T. У нас есть несколько тестов, управляемых данными, запущенных с помощью visual studio. Я также считаю, что в N-Unit есть некоторые функции тестов, управляемых данными.
Если вы знакомы с Apache Cocoon, вы можете использовать CoUnit , который использует xslt-unit под капотом.
Контрольные примеры выглядят так:
<testcase id="03-reverse" ignore-whitespace="true">
<input>
<text-to-reverse>
The text in this element
<embedded-element/>
will be reversed.
</text-to-reverse>
</input>
<expect>
<text-to-reverse>
tnemele siht ni txet ehT
<embedded-element/>
.desrever eb lliw
</text-to-reverse>
</expect>
<xslt src="reverse.xsl"/>
</testcase>