*

Titanium Mobile応用【JasmineとTiShadowでBDD編:テストが時々失敗する理由】

公開日: : 最終更新日:2014/04/27 CoffeeScript, Titanium ,


スポンサードリンク



前回の最後に残った問題点の解決方法が分かりましたので
「BDD編その5」として記載させていただきます。

本エントリーは、Titanium Mobile応用【計算機アプリBDD編】のその5となりますので、
「BDD編その1」
「BDD編その2」
「BDD編その3」
「BDD編その4」
をまずはご参照ください。

前回エントリーでの問題点は、「テストケースが失敗することがたまにある。」でした。
結論を書くと「fireEventが非同期で動作するから」でした。

その4の終了時点のndex_spec.coffeeは以下のようになっていました。

index.coffeeは以下のようになりました。

本筋からは少し外れますが、
PTやST等の工程に関わらず、テストの結果が同じにならないという現象はよくある話ですね。
協力会社に作業をお願いしていて、受け入れテストしたら異常終了する。
先方に問い合わせると「同じ操作をしても問題なく動きますが・・・」みたいなやり取りもよくありますよね。

話しは戻って、今回のテスト対象のアプリはDBも使ってないですし、異常終了でもないですし、
素直に考えると、処理のタイミングが悪いとしか思えません。それって、マルチスレッドの処理で失敗している時に起こる問題では!
と思い、切り分けのためにウエイト処理を入れて、処理が競合する可能性が低くなるようにしてみました。

ログとwaits(1000)を追加したtestCalcButtonClickメソッド

 

変更したテストケースを実行してみると、思った通りです。
「ドクターX ~外科医・大門未知子~」の米倉涼子さんのきめ台詞「私、失敗しないので」ばりです。

ウエイト無し、ウエイト有り(1000msec)、ウエイト有り(100msec)、ウエイト有り(10msec)
で各20回実行した結果が以下の表の通りです。

パターン 失敗回数 失敗割合
ウエイト無し 8 40%
ウエイト有り(10msec) 5 25%
ウエイト有り(100msec) 0 0%
ウエイト有り(1000msec) 0 0%

 

やはり!!、間違いない!!!,fireEventは非同期で動いている。
と思って調べてみるとそうでした。
確かに最近のWebアプリのボタンイベントは非同期が主流ですよね・・・
でも、モバイルなんですが・・・

結局は、fireEventの終わりを待たないといけないのですね・・・
Titaniumは同一イベントに複数のコールバックを登録することが可能なのでテスト開始時に複数ボタンが押されたことを検出する仕組みを組み込んでwaitsForで待つようにすればOKです。
と思ったのですが、specからボタンオブジェクトにアクセスしてのイベントリスナー登録できなかったので断念しました。

最終的にclickイベントのハンドラの終わりで値が変わるフラグを導入することで対応しました。

変更点を以下の通りです。
・index.coffee
ボタンクリック時の処理が終わったフラグをに追加し、
clickイベントのハンドラの最後でフラグをセットする処理を追加する。

・index_spec.coffee
fireEvent前にフラグをクリアし、fireEventの発火後にwaitsForでフラグがセットされることを待ち合わせる。

変更後のindex.coffeeは以下のようになりました。
(ログも追加しています。)

 

変更後のindex_spec.coffeeは以下のようになりました。
(ログも追加しています。)

 

最後に1+0,1+1のテストを実行した時の実行結果を以下に示します。

 

TitaniumでBDDを実施するのであれば、PS時からこの事実を考慮しておかないといけないですね・・・


スポンサードリンク

Googleアドセンス

Googleアドセンス




関連記事

no image

Titanium mobileでAndroidのActionBarを利用する。

Titanium mobileで基本的な画面遷移を試そうと思い、画面遷移のイベントを仕込むボタンをど

記事を読む

Titanium Mobile入門【導入編 on Mac】

いよいよTitanium Mobile入門【導入編 on Mac】です。 Titanium Mob

記事を読む

no image

MacでSublime Text 2を利用してCoffeeScriptを書く環境の構築

以前のWindows環境では、TitaniumもTitanium StudioではなくCLI環境を利

記事を読む

no image

Titanium mobileでiPhoneのNavigationBarを利用する。

Titanium mobileで基本的な画面遷移を試そうと思い、画面遷移のイベントを仕込むボタンをど

記事を読む

Titanium Mobile入門【導入編】

スマホでアプリを開発すべくTitanium Studioの動作環境を作成し、Default Allo

記事を読む

Titanium Mobile応用【JasmineとTiShadowでBDD編:15桁入力処理】

前回の続きで、「BDD編その3」です。 「BDD編その1」 「BDD編その2」をまずはご参照くだ

記事を読む

Titanium Mobile応用【JasmineとTiShadowでBDD編:対象アプリ説明】

本格的にTitanium Mobile CLIを利用してBDDを行いたいと思います。 まずは、計算

記事を読む

no image

Titanium Mobile入門【TiShadow活用編】

「Titanium Mobile入門【TiShadow導入編】」ではTiShadowの導入と接続用の

記事を読む

Titanium Mobile応用【JasmineとTiShadowでBDD編:数値ボタンの1回押し処理】

前回の続きで、「BDD編その2」です。 BDD編その1をまずはご参照ください。 今後のBDD

記事を読む

TitaniumのTableViewを試してみる【何故か後編】

「TitaniumのTableViewを試してみる【何故か前編】」では、予想に反してiOSシュミレー

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。

個人では初となるiOSアプリをリリースいたしました。 何度もリジ

no image
Ruby on rails4系でBootstrapを利用するためのtips

MacでRuby on rails4系のBootstrapを利用しよう

no image
Java、Eclipse、JUnit関連のエントリーの移行のお知らせ

Java、Eclipse、JUnit関連のエントリーは http:/

iOS8開発者向けお勧め本紹介[詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応]

iOS7開発者向けお勧め本紹介を以前に紹介させていただきまいたが、今回

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第二回「関数(メソッド)とクロージャーの利用方法」

前回はSwiftの概要をザックリと説明させていただきました。 今

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑