読者です 読者をやめる 読者になる 読者になる

kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

FlexUnit 4でテストスイートを作る

複数のテストケースをまとめたテストスイートを作成します。テストスイートで管理することで、必要なテストを簡単に実行できます。

ファイル構成は次の通りです。今回は公式Wikiにあるような構成としました。
f:id:kkAyataka:20120225145125p:plain

まあ、個人的にはテスト対象プロジェクトのパッケージ構成をそのまま持ってきて、パッケージごとにスイートを準備する方が分かりやすい気がします。そして、テスト対象のクラスごとにテストケースを書く感じでしょうか。テスト対象のメソッドごとにテストケースを書くのも分かりやすそうなのですが、平均すると無駄にコストが高くつきそうなので、これはやめた方が良いかな。

テストケース

とりあえずのテストケース。今回も特に意味は無いです。

// TestCase1.as
package suite.tests {
  import org.flexunit.Assert;

  public class TestCase1 {
    [Test]
    public function testMethod():void {
      Assert.assertEquals(Math.pow(2, 2), 4);
    }
  }
}
// TestCase2.as
package suite.tests {
  import org.flexunit.Assert;

  public class TestCase2 {
    [Test]
    public function testMethod():void {
      var array:Array = new Array();
      Assert.assertEquals(array.length, 0);
    }
  }
}

テストスイート

テストスイートはクラスに[Suite]と[RunWith("org.flexunit.runners.Suite")]メタデータをつけて定義します。内包するテストは単にメンバ変数として宣言するだけです。テストスイートを宣言することもできるため、スイートを入れ子にすることができます。

// TestSuite.as
package suite {
  import suite.tests.TestCase1;
  import suite.tests.TestCase2;

  [Suite]
  [RunWith("org.flexunit.runners.Suite")]
  public class TestSuite {
    public var t1:TestCase1;
    public var t2:TestCase2;
  }
}

テストランナー

FlexUnitCoreのrunメソッドにスイートクラスをそのまま渡してやれば実行されます。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
  xmlns:mx="http://www.adobe.com/2006/mxml"
  xmlns:flexUnitUIRunner="http://www.adobe.com/2009/flexUnitUIRunner"
  width="1200"  height="580"
  creationComplete="creationCompleteHandler(event)">

  <mx:Script>
    <![CDATA[
      import mx.events.FlexEvent;

      import org.flexunit.listeners.UIListener;
      import org.flexunit.runner.FlexUnitCore;

      import suite.TestSuite;

      private var core:FlexUnitCore;

      private function creationCompleteHandler(event:FlexEvent):void {
        core = new FlexUnitCore;

        core.addListener(new UIListener(uiListener));

        core.run(TestSuite);
      }
    ]]>
  </mx:Script>
  <flexUnitUIRunner:TestRunnerBase
    id="uiListener"
    width="100%" height="100%" />
</mx:WindowedApplication>

コンパイルと実行

コンパイルして実行します。

$ mxmlc -library-path+=libs app.mxml 
$ adl app-desc.xml 

実行結果です。本当はスイートを含めて階層的に表示されるとイメージがつきやすいのですが、標準のものは実行したテストケースしか表示されません。
f:id:kkAyataka:20120225145150p:plain