麻婆豆腐 EOS 70D, EF-S 60mm F2.8
さて、AndroidアプリをUIレベルでテストすると、結果的には全てのレイヤーの機能を複合的に使うことになります。このため、このような機能は統合テストになります。
Maxima on Androidでは以下のようなテストがこのレベルとして考えられます。
- Maxima起動後、メニューからアクセス出来る機能が正しく動作するかどうかのテスト。今のところ、全ての言語設定で、マニュアルが正しく切り替わって表示されるテスト及びAbout MoAが正しく表示されるテストを実装しました。
- グラフ描画コマンドを実行させると、実際にグラフが描画されるテスト。drawdf()という力学系のグラフ描画コマンド使って実装しました。
- その他、マニュアルの中の例題のタッチによる実行、入力済みのコマンドのタッチによる実行、セッション保存/読み込み機能、などはこれから実装。
このようなテストもAndroid SDKではサポートされており、Instrumentationという機能を使って書くことができます。しかし、このやり方は非常に記述が面倒です。
そこでUIテスト記述を非常に簡単に出来るRobotiumというフレームワークがあります。このフレームワークを使うと、
solo.clickOnMenuItem(menuSettings,true);
solo.clickOnText("Brazilian Pt manual");
assertEquals(solo.waitForDialogToClose(),true);
solo.clickOnMenuItem(menuManual);//open manual
solo.waitForWebElement(By.className("settitle"),tout,false);
assertEquals(solo.getWebUrl(), "file:///android_asset/maxima-doc/en/pt_BR/maxima.html");
こんな感じでテストを記述出来ます。
ただテストの記述は簡単になりますが、このテスト、GingerbreadとJerry Beansではパスするのですが、HoneycombやICSでは通らない、という不思議なことが起きます。Robotiumの実装がAndroidのUIフレームワークの実装に依存しているからだと思います。
この分野はまだまだ絶対的な手法は確立されていないようです。