FlexUnit 4でテストスイートを作る
複数のテストケースをまとめたテストスイートを作成します。テストスイートで管理することで、必要なテストを簡単に実行できます。
ファイル構成は次の通りです。今回は公式Wikiにあるような構成としました。
まあ、個人的にはテスト対象プロジェクトのパッケージ構成をそのまま持ってきて、パッケージごとにスイートを準備する方が分かりやすい気がします。そして、テスト対象のクラスごとにテストケースを書く感じでしょうか。テスト対象のメソッドごとにテストケースを書くのも分かりやすそうなのですが、平均すると無駄にコストが高くつきそうなので、これはやめた方が良いかな。
テストケース
とりあえずのテストケース。今回も特に意味は無いです。
// 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
実行結果です。本当はスイートを含めて階層的に表示されるとイメージがつきやすいのですが、標準のものは実行したテストケースしか表示されません。