2011-04-11 43 views
21

Cualquiera sabe si hay alguna forma de que podamos escribir pruebas unitarias para la transformación XSLT. Tengo mucho para archivos XSLT y cada vez es más difícil probarlos manualmente. Sé que podemos tener un XML de muestra y compararlo con el resultado del XSLT, pero estoy buscando una mejor manera de probarlos.Pruebas unitarias XSLT

Gracias ...

Respuesta

5

intenta XSpec, un marco de pruebas para XSLT. Le permite escribir pruebas declarativamente y probar plantillas y funciones.

+0

¿Cómo probar una transformación en un modo particular con XSpec? –

12

Actualmente estoy buscando algunas buenas opciones para hacer esto también. Como resultado, me encontré con esta pregunta y algunas otras posibles soluciones candidatas. Es cierto que aún no he probado ninguno de ellos, así que no puedo hablar de su calidad, pero al menos son otras vías potencialmente valiosas para investigar.

  1. Jenni Tennison's Unit Testing Package
  2. UTF-X Unit Testing Framework
  3. Juxy
  4. XTC

Además, he encontrado el siguiente artículo para ser informativo en términos de una metodología general para XSLT prueba de la unidad.

Unit test XSL transformations

+0

¿Alguna actualización? has intentado alguno de ellos? –

+0

Lamentablemente, esta tarea quedó en un segundo plano en mi trabajo poco después de que empecé a investigar y nunca tuve la oportunidad de volver a visitarla. – Scott

0

Hemos estado utilizando casos de prueba de unidad basados ​​en Java, en los que proporcionamos cadenas de caracteres xml esperadas después de la transformación e ingresamos cadenas de caracteres XML que deben ser transformadas utilizando algún tipo de XSL. Consulte el siguiente paquete si desea explorar más.

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

Estas son algunas soluciones simples:

  • Uso xsltproc con un archivo XML simulacro:

    xsltproc test.xsl mock.xml 
    
  • XSLT Cookbook - Chapter 13

  • crear una variable document() marcador de posición y comentario/descomentarlo manualmente:

    <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> 
    
  • crear una condición para cambiar la programación comentario:

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

uso de un script de shell para Inline los datos mediante programación en la construcción para automatizar las pruebas por completo.

Referencias

0

Estoy utilizando esta herramienta: jxsltunit.

La prueba se define mediante un archivo XML que luego se pasa a la herramienta. Este es un ejemplo de la configuración de prueba:

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

Toma el XML, el XSL y un camino en el XML transformada que se hace la prueba. La ruta puede contener una lista de los elementos identificados por su índice.

Uno de los beneficios de esta herramienta es que puede mostrar los resultados como un archivo XML junit. Este archivo puede ser recogido por su Jenkins para mostrar las pruebas XLST en los resultados de sus pruebas. Simplemente agregue la llamada a la herramienta como un paso de compilación.