Vor kurzem hatte ich Adobes Open Source für Unittests mit dem Namen FlexUnit bereits hier im Blog vorgestellt. In der Zwischenzeit hat sich die Bibliothek weiterentwickelt und kann nun auf einfachere Weise per Compiler-Metadaten (z.B. [Test]) gesteuert werden.

Außerdem sind die Unittests fester Bestandteile der kommenden Flash Builder 4-Version, die aktuell in der Betaphase ist. Wie einfach die Unittests aufzusetzen sind, möchte ich in diesem Artikel zeigen.

Als Beispiel verwende ich die bewährte Calculator-Klasse aus den Artikeln Unittests mit FlexUnit und AsUnit

Neuheiten im Flash Builder

Der Flash Builder kümmert sich automatisch darum, dass die notwendigen .swc-Files für FlexUnit dem Projekt hinzugefügt werden.

Unter „Datei > Neu > TestSuite-Klasse” lässt sich eine neue TestSuite erstellen. Die einzelnen TestCases sind direkt darunter („Datei > Neu > TestCase-Klasse”).

Hinter dem Debug-Button (oder im Menü „Ausführen > Debuggen”) ist die neue Option „FlexUnit-Tests”, die ein Popup öffnet. Dort lassen sich anklicken, welche TestSuites oder TestCases ausgeführt werden sollen. Anschließend wird der Test gestartet.

Im folgenden 4-minütigen Screencast sieht man, wie die TestSuite und der TestCase aufgesetzt werden.

Metatags für FlexUnit

Mit [Before] und [After] können Funktionen definiert werden, die vor bzw. nach dem Test aufgerufen werden. Somit lassen sich Vorbereitungen treffen oder danach Objekte wieder sauber entfernen.

Mit [Test] wird der eigentliche Test definiert. Die Testanforderungen sind nun über Klassenmethoden von Assert aufstellbar.

Actionscript:
  1. [Before]
  2. public function setup():void {
  3.     calculator = new Calculator();
  4. }
  5.  
  6. [After]
  7. public function tearDown():void {
  8.     calculator = null;
  9. }
  10.  
  11. [Test]
  12. public function testAddNumbers():void
  13. {         
  14.     Assert.assertEquals(calculator.addNumbers(5,10), 15);
  15. }

In der TestSuite muss letztendlich lediglich eine öffentliche Variable des Tests hinzufügen. Den Rest macht FlexUnit alleine.

Actionscript:
  1. [Suite]
  2. [RunWith("org.flexunit.runners.Suite")]
  3. public class CalculatorTestSuite {
  4.         public var calcTest:CalculatorTest;
  5. }

Link: Test Driven Development using Flash Builder 4 beta and FlexUnit