XML testen / XSLT Unit Tests mit XSpec

XSLT Unit Tests mit XSpec

XSLT Unit Tests mit XSpec

➪ XSpec unterstützt Unit-Testing von XSLT-Funktionen.

In XSLT 2.0 ist die Definition eigener Funktionen hilfreich, deren Parameter sowie Wertrückgaben durch Schema-Datentypen typsauber definiert werden können. Zur Definition von Funktionen sind Namespace-Deklarationen erforderlich; hier wurde hilfweise xmlns:bsp="funktionsdemo" verwendet. Das folgende Beispiel zeigt die Definition der Funktion "Multipliziere" sowie ihren Aufruf im Rahmen eines Templates.


 <xsl:function name="bsp:Multipliziere" as="xs:decimal">
  <xsl:param name="wert1" as="xs:decimal"/>
  <xsl:param name="wert2" as="xs:decimal"/>
  <xsl:sequence select="$wert1 * $wert2"/>
 </xsl:function>
 <xsl:template name="Funktionsdemo">
  <ERGEBNIS>
   <xsl:value-of select="bsp:Multipliziere(9, 5)"/>
  </ERGEBNIS>
 </xsl:template>

Seit vielen Jahren haben sich systematisierte, automatisierte Testverfahren in der professionellen Programmierung bewährt. Testing bedeutet die gezielte Prüfung, ob ein Codeteil ein erwartetes Ergebnis korrekt generiert. Dabei gibt es unterschiedliche Arten von Tests: vom einfachen Unit-Test, der einzelne Codeteile eines umfassenderen Programms separat überprüft, über einen komplexeren Test, der die Funktionsfähigkeit des gesamten Programms überprüft, bis hin zu Integrations- und Lastentests, die sicherstellen sollen, dass der Aufruf des gesamten Programms im produktiven Umfeld keine Probleme bereitet.

Automatisierte Tests legen eine Reihe unterschiedlicher Inputvariablen sowie jene Resultate fest, die der Codeteil jeweils generieren sollte. Ein Testprogramm durchläuft die Testfälle, ruft jeweils das zu testende Programm auf und vergleicht das erwartete mit dem tatsächlichen Ergebnis. Abweichungen werden in einem Fehlerreport aufgelistet. Die Testautomatisierung bedeutet eine große Zeitersparnis. Je komplexer die Programmlogik, desto komplexer auch die Tests: Ein Einzeltest reicht für ein Programm, das mit diversen Fallunterscheidungen, Schleifenlogiken, optionalen Inputvariablen etc. arbeitet, so gut wie nie aus.

Die Testsystematik besteht in der gezielten Auswahl der Parameterübergaben und Erwartungswerte: Das Programm wird mit bestimmten Situationen konfrontiert, hinter denen sich mögliche, vielleicht gar häufige Programmierfehler verbergen, und auf diese Weise getestet, ob es mit diesen Situationen umgehen kann.

Der große Vorteil dieser Festlegungen besteht in der jederzeitigen automatisierten Wiederholbarkeit der gesamten Testsequenzen. In Sekundenschnelle können Tausende Szenarien überprüft und reportet werden. Testverfahren dieser Art gehören auch dann zum Standard, wenn Developer meinen, dafür keine Zeit zu haben. Vgl. .

In XSLT hat sich für das Unit-Testing von Funktionen (ebenso für Templates) der XSpec-Standard etabliert, dessen Anwendung für die o.a. Funktion Multipliziere wie folgt aussehen könnte.


<?xml version="1.0" encoding="UTF-8"?>
<x:description 
  xmlns:x="http://www.jenitennison.com/xslt/xspec" 
  stylesheet="p06_XSL20.xsl" 
  xmlns:bsp="funktionsdemo">
    <x:scenario label="Scenario for testing a function">
      <x:call function="bsp:Multipliziere">
         <x:param select="3"/>
         <x:param select="9"/>        
      </x:call>
      <x:expect label="3 * 9" select="27"/>
    </x:scenario>
    <x:scenario label="Scenario for testing a function">
      <x:call function="bsp:Multipliziere">
        <x:param select="4"/>
        <x:param select="2"/>        
      </x:call>
      <!-- ich provoziere bewusst ein falsches Ergebnis -->
      <x:expect label="4 * 2" select="7"/>
</x:scenario>
</x:description>

wg / 5. April 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XSpec.html