ユーザシナリオテスティングフレームワーク「 robotium」を使ってみた
Androidアプリのブラックボックステストを簡単で強力に行えるというテストフレームワーク「robotium」を使ってみたよ。
GitHub - RobotiumTech/robotium: Android UI Testing
サンプルテストケースの実行
サンプルとして、NotePadのテストが公開されているので、それを試してみた。
NotePadプロジェクトの作成
NotePadアプリはSDKに含まれているので eclipse でプロジェクトを作成する。
File -> New -> Project... -> Android Project からダイアログボックスで Create project from existing sample で NotePad を選択してプロジェクトを作成する。
テストプロジェクト
以下から最新のテストサンプルをDLする。
GitHub - RobotiumTech/robotium: Android UI Testing
現時点では
ExampleTestProject_v7.zip
これを eclipse でインポート。
AndroidManifest.xml にSDK versionを指定する。 NexusS 2.3.4 の場合
<uses-sdk android:targetSdkVersion="10" />
これでOK。
テストが通らない!
アプリがアップデートされたのか、SDKによってキーボードの挙動が違うのか、テストが通らなかった。
enterText() のあとに goBack() を追加するのと、searchText()がヒットしてなかったのを変更したら通った。
やってること
サンプルにはAddNote, NoteChange, NoteRemoveの3つのテストが含まれている。
- AddNote
ノートを新規作成する。2つのノートをそれぞれNote 1, Note 2 という名前で作成。
- NoteChange
ノートの編集をする。Note 1 のタイトルを編集する。"Note 1 Test"という名前になることを期待しているが、今回の環境ではフォーカスが先頭にくるので"TestNote 1"という名前を期待するように変更した。
- NoteRemove
作成したノートを2つとも削除する。
メモ
実動作とテスト時の動作が違う
testNoteChange() solo.pressMenuItem(2); // Change title solo.enterText(0, "test"); //In text field 0, add test solo.goBack();
これ、手で操作すると MenuItem(2) (=> Edit title) をタップするとダイアログボックスが出てきてそこでタイトルを編集するんだけど、TestCaseではダイアログボックスが出てきてない。
シナリオとしては以下でsuccessして欲しいけどfailしちゃうので、その挙動に合わせたTestCaseを書いてるので本末転倒な感じになっちゃった。
pressMenuItem(2); solo.enterText(0, "test"); solo.clickOnButton("OK"); ...
まだサンプル試した段階だから何か間違ってるのかもしれないけど、ちょっとクセがあるのかなぁ