starlingをflexunitで ユニットテストしてみる。

15

Click here to load reader

Upload: utweb

Post on 16-Jun-2015

341 views

Category:

Technology


1 download

DESCRIPTION

東京ひよこの会 (第7回勉強会)の発表資料。

TRANSCRIPT

Page 1: StarlingをFlexUnitで ユニットテストしてみる。

StarlingをFlexUnitで ユニットテストしてみる。

FlashBuilderで。

Page 2: StarlingをFlexUnitで ユニットテストしてみる。

自己紹介

• 宇都宮正宗 1975生まれ。プログラマー。

• @masamunet

• 大阪で、宇都宮ウエブ制作所という屋号でいろいろやっています。

Page 3: StarlingをFlexUnitで ユニットテストしてみる。

あらかじめ謝っておくこと

• Starlingに限った方法ではないこと

• モバイル(AIR for iOS)とも直接関係ないこと

• 厳密にユニットテストというと疑問があること

• FlashBuilderという、限られた開発環境でのお話しであること

Page 4: StarlingをFlexUnitで ユニットテストしてみる。

やりたいこと• 狙ったViewを、FlexUnit環境で表示させたい!

• assertはできなくてもいい

• assertさせたい処理は別クラスで書くので

• 動きのチェックなど、目視でしか判断できないところを繰り返し表示させたいので

Page 5: StarlingをFlexUnitで ユニットテストしてみる。

どのようにテストするか• 別プロジェクトにわけてテストする

• やり方がわからなかった…

• プロジェクト内にtestパッケージを作ってその中でテストする

• リファクタリング時に、テストのエラーが残るとコンパイル出来なくなる

• 厳格に考えればそれでいいのかもしれないけど…

• 今回はこっちでやります

Page 6: StarlingをFlexUnitで ユニットテストしてみる。

ポインヨ• 最終的には任意のViewを、StarlingのstageにaddChildしたい

• いかにFlexUnitのstageを参照出来るようにするか

• 別にStarlingに限った話しではないけど…

• 「FlexUnit stage」でぐぐる

• 前提条件が違うのか、どれもうまく動かず…

Page 7: StarlingをFlexUnitで ユニットテストしてみる。

ポインヨ• 最終的には、テストケースクラスに、stageを参照できるようにして、そこに任意のViewをaddChildさせれば何でもよい

• 今回はこのへんを参考にしてみる

http://forum.starling-framework.org/topic/testing-starling-application-with-flexunit

Page 8: StarlingをFlexUnitで ユニットテストしてみる。

やってみよう• FlexUnitのstageを参照出来るようなクラスを作成。

FlexUnitStarlingIntegration.as

https://github.com/masamunet/StarlingFlexunitTest/blob/master/test/FlexUnitStarlingIntegration.as

Page 9: StarlingをFlexUnitで ユニットテストしてみる。

やってみよう• テストケースごとにStarlingを初期化する処理を共通できるように親クラスを作成

TestStarlingDisplayObject.as

https://github.com/masamunet/StarlingFlexunitTest/blob/master/test/views/TestStarlingDisplayObject.as

Page 10: StarlingをFlexUnitで ユニットテストしてみる。

やってみよう• 各テストケースは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

Page 11: StarlingをFlexUnitで ユニットテストしてみる。

やってみよう• 自動生成されるFlexUnitApplication.asのコンストラクタ内に、FlexUnitのstageを参照させるように、次の処理を追加。

FlexUnitStarlingIntegration.nativeStage = stage;

• これ毎回しないといけないので超めんどい。

https://github.com/masamunet/StarlingFlexunitTest/blob/master/FlexUnitApplication.as

Page 12: StarlingをFlexUnitで ユニットテストしてみる。

やってみよう• FlexUnitApplication-app.xmlのrenderModeをdirectに。

<renderMode>direct</renderMode>

• これも毎回勝手に書き換わるので面倒臭くてしぬ。

https://github.com/masamunet/StarlingFlexunitTest/blob/master/FlexUnitApplication-app.xml

Page 13: StarlingをFlexUnitで ユニットテストしてみる。

問題点• テストケースを変更するたびに、 FlexUnitApplication-app.xmlFlexUnitApplication.asが勝手に書き換わるので、その都度こちらで手を加えなければいけない。

• ここのテンプレート触れればいいのだけど…。

• このへんはもしかして、FlashBuilderでなければ解決できるのかもしれない。

Page 14: StarlingをFlexUnitで ユニットテストしてみる。

• assertさせないなんてテストじゃないなんて声も聞こえてきそうだけど、そこはほら、テストスウィートの皮を被ったオレオレテストですから。

• 逆にassertさせにくい、動きの調整を繰り返し行うようなときに便利。

• そもそも、assertで拾っておきたい処理はviewと切り離しておくほうがいいのでは?とも思う。

• あとこれだと一発で画面表示できるの便利。

• モバイル開発でANEを導入したあとのタイミングで、実機でしか動かなくなったときも便利。

Page 15: StarlingをFlexUnitで ユニットテストしてみる。

ご静聴ありがとう ございました。