Calabash-Androidで
 BDDしようぜ!

     2012/08/16
     @patorash
Cucumberとは?
• Ruby製 のBDD用のライブラリ
• BDDとは振る舞い駆動開発の略
• 受け入れテストでよく使われる
• ユーザーストーリーを書いてそれに沿っ
 た実装をするため、仕様の漏れを失く
 せる。
なぜCucumber?



•   日本語でテストが書けるから
• ちなみにCucumberはキュウリのこと
Calabash-Androidとは?

• AndroidアプリでCucumberを使ってテス
 トできるライブラリ

• gemでインストールが可能

• ちなみにCalabashは瓜(ウリ)のこと
インストール方法

•   Android SDKをインストールしとく

•   ANDROID_HOMEという環境変数を
    定義する(Android SDKへのパス)

•   Rubyのインストールをしとく
    (ぐぐってね)

•   gem install calabash-android
初期化

•   (Androidプロジェクトで)calabash-android gen

•   以下のファイル群ができる。
    features/step_definitions/
    features/support/
    features/my_first.feature
    irb_android.sh
features/step_definitions

• ステップ処理を書くところ
• 不明なステップができたらここに書い
  ていく。Rubyで記述する。

• 日本語での対応処理をここに書く
  (後述)
こんな感じ
# coding: utf-8
require 'calabash-android/calabash_steps'

もし /^"(.*?)"ボタンを押す$/ do |text|
 step %{I press the "#{text}" button}
end

ならば /^"(.*?)"と表示されていること$/ do |text|
 step %{I should see "#{text}"}
end
features/***.feature
• テスト内容を書くところ
• ある程度決められたルールで書く
 (例)

• 前提 ログインしていること
• もし 面白いツイートをする
• ならば ふぁぼられること
デモアプリ解説

•   ログインID、パスワー
    ドを入力する。


•   OKなら次の画面へ


•   NGならトーストで
    エラー表示
まずは書く!

• my_first.featureを編集する
 (別にファイル名はなんでもいい)

• まずは好き勝手に日本語で書く!
• こうなるべきだというのを書く!
# language: ja
フィーチャ: ユーザー認証を行う。
 アプリのユーザーとして
                  ユーザーストーリーを記述
 認証を行う。
 なぜならば、ユーザー単位の情報を扱うからだ。

シナリオ: 正常にログインする
 もし ログインIDに"calabash"と入力する
 かつ パスワードに"android"と入力する
 かつ "ログイン"ボタンを押す             シナリオを記述
 かつ ダイアログが閉じるまで待つ
 ならば "SuccessActivity"画面が表示されるまで待つ
 かつ "ログインしました"と表示されていること
テスト実行

• テスト端末に対象アプリをインストール
• calabash-android run bin/calabash-sample.apk
  (引数にapkファイルを指定する)
_人人人人人人人_
  > 当然エラー <
    ̄^Y^Y^Y^Y^Y^ ̄
• stepの定義してないから。
• でも安心!!
• テストの雛形をCucumberが作ってくれ
 る!あとはコピペするだけ!楽チン!
こんなの
もし /^ログインIDに"(.*?)"と入力する$/ do |arg1|
 pending # express the regexp above with the code you wish you had
end

もし /^パスワードに"(.*?)"と入力する$/ do |arg1|
 pending # express the regexp above with the code you wish you had
end




  これをstep_definitions/***_steps.rbにコピペする
ステップの編集
もし /^ログインIDに"(.*?)"と入力する$/ do |loginId|
 step %{I enter "#{loginId}" into "LoginId"}
end

・何をしているか?
contentDescriptionが”LoginId”のEditTextにログインIDを入力している

こんな感じでどんどんステップを書いていく。


ステップ用のコードはgithubに書いてあるからそ
れを参考に日本語で定義し直せばいい。
https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/
canned_steps.md
実はgistにアップ済み

•   https://gist.github.com/ae31aca10f3152ad8cd0

    ※不完全だし未検証だけど
ということで、
  デモ
所感
• BDDやるにはそこそこ出来上がってる。
• 細かくテスト流すのは時間がかかって
 キツイ。受け入れテストにはよさげ。

• 事前のデータ投入などできないと思う。
 (無理矢理ループしまくるとか?)

• ユニットテストはJUnitで。
お・わ・り

Calabashでbddしようぜ