Cocos2d xゲームでuiテスト自動化
-
Upload
naoyuki-totani -
Category
Engineering
-
view
1.956 -
download
5
Transcript of Cocos2d xゲームでuiテスト自動化
Cocos2d-xゲームでUIテスト自動化
cocos2d-x勉強会
自己紹介
● 戸谷直之● フリーエンジニア
@blankblank
なぜUIテスト自動化?
● あっちの変更でこっちがバグってたりする● でもいちいち確認するのが面倒
UIテストの問題点
● 外部環境○ 入力、時間、乱数、IO
● エントリポイント● アサーション
などなど
そこで、Cocos Console
Cocos Consoleとは
● 実行中のゲームとCLIで対話する仕組み● ゲーム内にTCPサーバを立てる
“reload”
“ok”
標準で用意されてるコマンド
● タップ、スワイプ○ touch tap 100 100
● シーングラフ描画○ scenegraph
● ゲーム全体の一時停止、再開○ director pause
などなど
コマンドの拡張も
● 例えば○ スクリーンショットの撮影
auto name = "ss";auto help = "take screen shot";auto callback = [](int fd, const string& args) { utils::captureScreen([fd](bool succeed, const string &outputFile) { send(fd, outputFile.c_str(), outputFile.size(), 0); }, "ss.png");};Director::getInstance()->getConsole()->addCommand({name, help, callback});
遊んでみる
実際にUIテストを作ってみる
● v3.4標準付属のゲーム○ 迫ってくるアリをタップして退治するゲーム
テストケース
1. 普通に起動画面が表示されてる2. 開始してほっとくと結果画面が表示されてる3. ほっとかずにアリをタップすると結果画面が表
示されてない
テストを書く前に①
● KIFを入れる○ iOS用のテストフレームワーク○ Xcode / XCTestと統合○ Objective-Cで書く
● https://github.com/kif-framework/KIF
テストを書く前に②
乱数を固定
function MyApp:onCreate() math.randomseed(os.time())end
function TestApp:onCreate() local counter = 0 math.random = function(a, b) counter = counter + 13 return a + counter % (b - a) endend
src/main.lua src/test/noRand.lua
テストを書く前に③
時間を固定
※アクション系のゲームだと時間固定が重要ですが、サンプルで真面目にやると結構大変そうだったので一部演出を変更して誤魔化してます
遊んでみるntotani/cocos2dx-uitest-sample
その他の議論
● 全部テストしようとすると大変○ ちょっとしたテストでも簡単にデータ量が膨れる
● 変更が大変○ 「ちょっとボタンずらしたいんだけど」
● プロダクトごとに適切な方針を○ 最低でも1レベル通しでクリアできるチェック○ チュートリアル等、気付きにくいとこ重点チェック
「人が足りない」からこそ自動化を!
● 大企業○ 別部署、偉い人など、なんだかんだ見られてる
● インディーゲーム○ マジで誰も見てなかった箇所多々
おわり