*

Titanium Mobile応用【JasmineとTiShadowでBDD編:最大桁入力と閾値テスト】

公開日: : 最終更新日:2014/05/26 CoffeeScript, Titanium ,


スポンサードリンク



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

今回は、足し算の処理をBDDします。
Windowsの計算機は計算結果が大きくなっても浮動小数点で
表示できますが、本計算機アプリでは15桁までしか扱えない仕様とします。

今回の作業手順は以下の通りです。

  1. 繰り上がりの無い足し算のテストケースの実装
  2. 繰り上がりの有る足し算のテストケースの実装
  3. 足した結果が15桁になるテストケースの実装
  4. 足した結果が16桁になるテストケースの実装
  5. 足す値(例:10+123)のテストケースの実装
  6. 計算機アプリへの足し算ロジックの実装

 

なお、前回までに作成したindex_spec.coffeeが長くなるため、
今回の内容とは直接関係ない部分は除外しています

1 繰り上がりの無い足し算のテストケースの実装

復習の意味も込めて、まずは、1+1のテストケースを書いてみました。
index_spec.coffeeは以下の通りです。

やりたいことはこんな感じですが、同じ内容のテストをコピペAND修正で
作成してしまうとメンテナンス性の低いテストになってしまいますので
今回もテストのヘルパーメソッドを作成しました。

ちょっと脇道にそれますが、動的にテストケースを生成するので
意図したテストがどれだけ実行されたとの観点では、なんでやねん!
と言われても仕方ないです。まあそれはログを残しておくなり、
実行されたテストケースの数を確認するなりの対処が必要です。

話は戻って
ヘルパーメソッドを作成するにあたり、opeButtonIdArrayとの変数を新たに
定義しました。演算ボタンのidの配列を保持する物となります。
加えてaddOperatorIndex=0との宣言も追加しました。
opeButtonIdArray[addOperatorIndex]と指定すると+ボタンのidが参照できる
との意図でです。連想配列でも良かったのですが、とりあえず別個に定義しました。

変更後のソースは以下の通りです。

 

せっかくなので実行してみましょう!
テストのコンパイルとテストの実行なので

を実行します。
実行した結果は以下の通りです。’11’で期待値は’2’となり失敗しました。予想どうりです。

 

引き続き繰り上がりの無い足し算のテストを実装していきますが、
ヘルパーメソッドが作成できたので、このメソッドの方向性が正しければ
for文で数値を回して呼び出すだけで良いはずです。
まあ、そんな考えは大体うまくいかない物ですが・・・
1+0から1+8までのテストのテストを追加しましたが、うまくいきました。
テストスイートは、以下のようになりました。

2 繰り上がりの有る足し算のテストケースの実装

全セクションのヘルパーメソッドの作成時点でほぼ終わってますね・・・
15が入力されているときに0から9ボタンが押されたときのテストを追加ました。
テストスイートは、以下のようになりました。

思ったようなテストになっているか確認するために実行してみましょう!結果は

と思った通りです。

3 足した結果が15桁になるテストケースの実装

このテストもテストスイートを追加するだけでOKです。
そもそも、このテストスイートが必要かどうか疑問ですが、
境界値テストって重要です。でもホワイトボックステスト的に考えると意味ないです。

テストスイートは、以下のようになりました。

4 足した結果が16桁になるテストケースの実装

testCalcButtonClickの修正が必要です。足し算の結果(getOperationDataメソッドの戻り値)が15桁より大きい場合の期待値の生成の分岐を追加します。
修正後のtestCalcButtonClickは以下のようになりました。

次に本来の計算結果が16桁になるテストケース追加しました。

5.足す値(例:10+123)のテストケースの実装

テストケースの実装完了までもう一息なんですが、
実際の計算機アプリの内容が貧相なので、そろそろ意味ねーじゃん!!
と言われても仕方なくなってきましたが・・・

ヘルパーメソッドtestCalcButtonClickの変更

このセクションのテストを追加するためにヘルパーメソッドtestCalcButtonClickの
第三引数:secondInputValueをsecondInputValueArrayに変更します。数値から数値の配列への変更です。

足す値が複数桁のテストの追加

見たままですが、既存のtestCalcButtonClick呼び出し部分は、第三引数が数値の配列
に変更されています。
変更後のindex_spec.coffeは以下のようになりました。

いよいよ最後のテストケースの追加です。

6 計算機アプリへの足し算ロジックの実装

前回エントリーの最後の時点のindex.coffeは以下のようになっていました。

またindex.xmlの+ボタンと=ボタン記述は以下のようになっていました。

まずは+ボタンのonClickイベントの設定と対応するメソッドを作成します。
あと=ボタンのonClickイベントの設定と対応するメソッドも必要です。
index.xmlの+ボタンと=ボタンの記述を以下のように変更します。

合わせてaddButtonClickHandlerメソッド、equButtonClickHandlerメソッドを
index.coffeに定義します。

とりあえず、こんな感じかなー、と思う実装を行ってみました。
index.coffeは以下のようになりました。=のハンドラは手を抜きすぎですが・・・

計算機アプリの反映とテストを実行します。

結果は、ぜんぜん駄目ですね・・・

 

なんでやねん!、とつぶやきながらテストを眺めていると
あ!、発見、fireEventの発火の順番が間違えている。
あと=ボタン押してない!!

index_spec.coffeeの該当箇所

を以下のように修正しました。

テストを実行したところ

との結果となりました。
惜しい、惜しすぎるーーーー!
ほとんどの失敗は数値と文字列を比較していることから発生しています。
それ以外の失敗は足し算(結果が16桁)の考慮漏れだけです。
上記の修正が終わったindex_spec.coffeeは以下のようになりました。

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

修正後のテストの実行結果は以下の通りです。

なんですが、やはり失敗することがあるんですよね・・・、前からたまに発生してました。
例えば

であったり

であったり・・・,他のテストケースの時もあります。
JasmineとTiShadowの相性か?、そもそもspecの書き方がまずいのか?
.coffeeから生成されたJavaScripは問題なさそうに見えるのですが・・・

Error handling entity dataとのエラーとログがTiShadow接続アプリの起動コンソール
出ているし、失敗を何度もしているとTiShadowから切断されてしまいます。
そのときに表示されるログはこの文字列です。

とりあえず、本計算機アプリを題材としての、当初やりたかった部分のBDDはできたと思いますので、計算機アプリBDD編は終わりにしたいと思います。

テスト結果が安定しない理由は分かり次第、Titanium Mobile応用【計算機アプリBDD編その5】で投稿する予定です。


スポンサードリンク

Googleアドセンス

Googleアドセンス




関連記事

Titanium MobileのAlloyにおけるUIコンポーネントの配置【後編】

Titanium MobileのAlloyにおけるUIコンポーネントの配置【前編】 に引き続き T

記事を読む

no image

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

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

記事を読む

Titanium Mobile入門【TiShadow導入編】

Androidだと格段に作業が早くなる。 複数のエミューレータで同時にテストを実行できる

記事を読む

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

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

記事を読む

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

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

記事を読む

Titanium Mobile入門【導入編 on Mac】

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

記事を読む

Titanium Mobile入門【導入編】

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

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 ↑