Dieser Artikel zeigt an einem kurzen Beispiel, wie FlexUnit verwendet wird. FlexUnit ist eine Open Source Bibliothek von Adobe für Unittests.

FlexUnit is a unit testing framework for Flex and ActionScript 3.0 applications and libraries. It mimics the functionality of JUnit, a Java unit testing framework, and comes with a graphical test runner.

Das Unittest-Prinzip und eine Lösung für reine ActionScript-Projekte hatte ich bereits mit AsUnit hier im Blog vorgestellt, siehe AsUnit: Unittests in ActionScript 3. Die Vorgehensweise ist stark ähnlich, deshalb habe ich das Beispiel aus dem AsUnit-Artikel nun mit FlexUnit nachgebaut.

Die zu testende Klasse

Zuallererst wählt man eine vorhandene Klasse, deren Funktionalität getestet werden soll.

Actionscript:
  1. package {
  2.     public class Calculator {
  3.         public var offset:Number;
  4.         public function Calculator():void {
  5.           offset = 0;
  6.         }
  7.         public function addNumbers(a:Number, b:Number):Number {
  8.             return a + b + offset;
  9.         }
  10.     }
  11. }

TestCase festlegen

Danach erstellt man eine Testklasse (vom Typ TestCase), die die einzelnen Tests enthält. Wie man sieht, wird z.B. mit assertTrue("...", calculator.addNumbers(10, 5) == 15) geprüft, ob das Ergebnis der Addition (10+5) die Zahl 15 ist.

Actionscript:
  1. package {
  2.    
  3.     import flexunit.framework.TestCase;
  4.    
  5.     public class CalculatorTest extends TestCase    {
  6.        
  7.         public function testAddNumbers():void {
  8.             var calculator:Calculator = new Calculator();
  9.             assertTrue("Testen von addNumbers mit 10 und 5", calculator.addNumbers(10, 5) == 15);
  10.            
  11.             calculator.offset = 5;
  12.             assertTrue("Testen von addNumbers mit 10 und 5 (Offset 5)", calculator.addNumbers(10, 5) == 20)      
  13.         }      
  14.     }
  15. }

Tests durchführen

Zuletzt benötigt man noch eine Hauptanwendung, die den TestCase zu einer TestSuite hinzufügt. Diese TestSuite kann nun mittels einer TestRunnerBase ausgeführt werden.

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3.                 xmlns:flexunit="flexunit.flexui.*"
  4.                 creationComplete="onCreationComplete()">
  5.    
  6.     <mx:Script>
  7.         <![CDATA[
  8.             import flexunit.framework.TestSuite;
  9.            
  10.             private function onCreationComplete():void {
  11.                                
  12.                 var myTestSuite:TestSuite = new TestSuite();
  13.           myTestSuite.addTestSuite( CalculatorTest );    
  14.                
  15.           testRunner.test = myTestSuite;
  16.                
  17.           testRunner.startTest();
  18.         }
  19.            
  20.         ]]>
  21.     </mx:Script>
  22.  
  23.     <flexunit:TestRunnerBase id="testRunner" width="100%" height="100%" />
  24. </mx:Application>

Testergebnisse

Liefert der Testcase nicht das gewünschte Ergebnis zurück, werden entsprechende Fehlermeldungen in der Flexanwendung aufgeführt.

Flex Unittest Errors

Läuft alles nach Plan, erscheint ein grünes Häkchen und die Klasse funktioniert wie gewünscht.

flex-unit-result-no-errors

Link: FlexUnit
Link: FlexUnit Cookbooks
Link: AsUnit: Unittests in ActionScript 3