6.ユニットテストを導入する
FlashMediaServerの紹介の割りにサーバーサイドアクションスクリプトをほとんど掲載していない本コーナーですが、今回も少々脱線して、 AS3Unit3を用いてユニットテストの実行ができるようにしてみます。
まずはSPARK ProjectのAS3Unitのページより swcファイルをダウンロードしてきます。(現時点では、FlexBuilder2の場合は「AS3Unit 1.2 (as3unit-1.2.swc)」、FlexBuilder3の場合は「AS3Unit 1.2 for FlexSDK3 (as3unit-1.2-sdk3.swc)」をDLします。)
ダウンロードしたswcファイルをプロジェクト内で読み込めるようにパスを通してあげます。
ナビゲーターの「プロジェクト名」を右クリック→「プロパティ」→「Flexビルドパス」→「ライブラリパス」で追加可能ですが、 良くわからない場合は、Windowsにデフォルトインストールした場合はC:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\frameworks\libs に設置することで自動で読み込ませることもできます。
次にmxmlファイルを以下のように書きかえます(ドキュメント宣言省略)。
上記タブはAIRプロジェクトのケースなので、Flashプロジェクトの場合はWindowedApplicationをApplicationに変更してください。
上記コードがテストを実行している部分で、AllTestsというのは全てのテストケースを同時に実行するクラスになります。
早速AllTestsクラスを見てみましょう。
ここではMainControllerTestと、CustomNetConnectionTestの2つのテストクラスを登録してあるという意味だと捉えてください。
SuiteClasses:Arrayにテスト対象のクラスを指定しています。
次は実際のテストコードが書かれたMainControllerTestクラスの中身をのぞいてみます。
というのがテスト用のネームスペースで、publicやprivateの変わりにtestが頭についた関数が自動で実行されます(ここではtest function init()がそれにあたります)。
テストの流れは、テスト対象となるクラス(MainController)を生成して、テスト対象となるメソッドを実行(main.init())しその結果を確認(assertTrue)という流れになります。
assertTrueというのはテスト対象メソッドの返り値(ないしはその一部)がtrueであることを確認するコードです。
上記サンプルではいまひとつ効能が伝わらないと思いますが、このような確認コードを色々な条件を用いて実行することでプログラムの手戻りを防ぐことができます。
個人的にはテストしやすいクラス=独立性の高い設計になるというのが大きな効能だと思います。
テストもとのMainControllerクラスは以下のようになります。
initメソッドで見事に何もしてないですね。まずはテストの第一歩目(本当の一歩目は失敗するコードですが)というところです。
もう一方のCustomNetConnectionTestがカスタムイベントを用いたコールバックテストのコードがあったりと実は面白いコードなのですが、最初の紹介としてはトピックが多くなってしまいそうなので次回に譲ることにしました。
というわけで、次回はカスタムイベントをもちいたコールバック処理と、そのテストコードを紹介しようと思います、FMS+AIRのサンプルアプリ紹介はその後紹介します。
参考書籍
ActionScript3のユニットテストについて紹介しているもの珍しい書籍


