starlingをflexunitで ユニットテストしてみる。
DESCRIPTION
東京ひよこの会 (第7回勉強会)の発表資料。TRANSCRIPT
StarlingをFlexUnitで ユニットテストしてみる。
FlashBuilderで。
自己紹介
• 宇都宮正宗 1975生まれ。プログラマー。
• @masamunet
• 大阪で、宇都宮ウエブ制作所という屋号でいろいろやっています。
あらかじめ謝っておくこと
• Starlingに限った方法ではないこと
• モバイル(AIR for iOS)とも直接関係ないこと
• 厳密にユニットテストというと疑問があること
• FlashBuilderという、限られた開発環境でのお話しであること
やりたいこと• 狙ったViewを、FlexUnit環境で表示させたい!
• assertはできなくてもいい
• assertさせたい処理は別クラスで書くので
• 動きのチェックなど、目視でしか判断できないところを繰り返し表示させたいので
どのようにテストするか• 別プロジェクトにわけてテストする
• やり方がわからなかった…
• プロジェクト内にtestパッケージを作ってその中でテストする
• リファクタリング時に、テストのエラーが残るとコンパイル出来なくなる
• 厳格に考えればそれでいいのかもしれないけど…
• 今回はこっちでやります
ポインヨ• 最終的には任意のViewを、StarlingのstageにaddChildしたい
• いかにFlexUnitのstageを参照出来るようにするか
• 別にStarlingに限った話しではないけど…
• 「FlexUnit stage」でぐぐる
• 前提条件が違うのか、どれもうまく動かず…
ポインヨ• 最終的には、テストケースクラスに、stageを参照できるようにして、そこに任意のViewをaddChildさせれば何でもよい
• 今回はこのへんを参考にしてみる
http://forum.starling-framework.org/topic/testing-starling-application-with-flexunit
やってみよう• FlexUnitのstageを参照出来るようなクラスを作成。
FlexUnitStarlingIntegration.as
https://github.com/masamunet/StarlingFlexunitTest/blob/master/test/FlexUnitStarlingIntegration.as
やってみよう• テストケースごとにStarlingを初期化する処理を共通できるように親クラスを作成
TestStarlingDisplayObject.as
https://github.com/masamunet/StarlingFlexunitTest/blob/master/test/views/TestStarlingDisplayObject.as
やってみよう• 各テストケースはTestStarlingDisplayObjectを継承。
• [Before]タグのメソッド内でstart()しとけば、あとは適当に非同期処理してくれるようにする。
https://github.com/masamunet/StarlingFlexunitTest/blob/master/test/views/TestGrowthView.as
https://github.com/masamunet/StarlingFlexunitTest/blob/master/test/views/TestProtrudeView.as
やってみよう• 自動生成されるFlexUnitApplication.asのコンストラクタ内に、FlexUnitのstageを参照させるように、次の処理を追加。
FlexUnitStarlingIntegration.nativeStage = stage;
• これ毎回しないといけないので超めんどい。
https://github.com/masamunet/StarlingFlexunitTest/blob/master/FlexUnitApplication.as
やってみよう• FlexUnitApplication-app.xmlのrenderModeをdirectに。
<renderMode>direct</renderMode>
• これも毎回勝手に書き換わるので面倒臭くてしぬ。
https://github.com/masamunet/StarlingFlexunitTest/blob/master/FlexUnitApplication-app.xml
問題点• テストケースを変更するたびに、 FlexUnitApplication-app.xmlFlexUnitApplication.asが勝手に書き換わるので、その都度こちらで手を加えなければいけない。
• ここのテンプレート触れればいいのだけど…。
• このへんはもしかして、FlashBuilderでなければ解決できるのかもしれない。
• assertさせないなんてテストじゃないなんて声も聞こえてきそうだけど、そこはほら、テストスウィートの皮を被ったオレオレテストですから。
• 逆にassertさせにくい、動きの調整を繰り返し行うようなときに便利。
• そもそも、assertで拾っておきたい処理はviewと切り離しておくほうがいいのでは?とも思う。
• あとこれだと一発で画面表示できるの便利。
• モバイル開発でANEを導入したあとのタイミングで、実機でしか動かなくなったときも便利。
ご静聴ありがとう ございました。