Scirocco を使ってみた
昨日のNativeDriverに引き続き、Androidのテストフレームワーク関連。
先日行われた「第1回Androidテスト祭り」で知ったSciroccoを使ってみた。
scirocco
環境の準備
上記ページのwikiに日本語のクイックスタートがあるので、ハマるところは全く無い。
テストを記述するプロジェクトを作る
昨日作ったテストを、Scirocco向けに書き直してみた。
NativeDriver向けのテストプロジェクトと異なるところは、Androidテストプロジェクトとして作るところ。
package orz.yanagin.android; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.Smoke; import asia.sonix.scirocco.SciroccoSolo; import asia.sonix.scirocco.annotations.Scirocco; public class CalcActivitySciroccoTest extends ActivityInstrumentationTestCase2<CalcActivity> { private static SciroccoSolo solo; public CalcActivitySciroccoTest() { super("orz.yanagin.android", CalcActivity.class); } public void setUp() throws Exception { solo = new SciroccoSolo(getInstrumentation(), getActivity()); } @Scirocco( testProcedure="計算機の初期値の確認", confirmationContents="表示される値が0であること") @Smoke public void test1() throws Exception { assertTrue(solo.searchText("0")); solo.takeScreenShot(); } @Scirocco( testProcedure="計算結果の確認<br/>1をタップ<br/>3をタップ", confirmationContents="1 + 3 の計算結果が 4 であること") @Smoke public void test2() throws Exception { solo.clickOnButton("1"); assertTrue(solo.searchText("1")); solo.takeScreenShot(); solo.clickOnButton("\\+"); assertTrue(solo.searchText("1")); solo.takeScreenShot(); solo.clickOnButton("3"); assertTrue(solo.searchText("3")); solo.takeScreenShot(); solo.clickOnButton("="); assertTrue(solo.searchText("4")); solo.takeScreenShot(); } @Scirocco( testProcedure="クリアボタンの確認", confirmationContents="クリアボタンを押した後に0になること") @Smoke public void test3() throws Exception { solo.clickOnButton("1"); solo.takeScreenShot(); solo.clickOnButton("C"); assertTrue(solo.searchText("0")); solo.takeScreenShot(); } @Override public void tearDown() throws Exception { try { //Robotium will finish all the activities that have been opened solo.finalize(); } catch (Throwable e) { e.printStackTrace(); } getActivity().finish(); super.tearDown(); } }
テストの実行
CalcActivitySciroccoTestを「Scirocco JUnit Test」として実行する。
すると、プロジェクトのルートにsciroccoというフォルダが出来、テスト結果レポートが作成される。
テストケース内に記述したコード
solo.takeScreenShot();
によって、テスト中のスクリーンショットが取れるので、画面の状態を確認することが出来る。
感想など
テスト中の画面が残るので、何かエラーがあった場合の確認がラクと思われる。
ただ、記述方法がNativeDriverのようにid指定ではなく、Robotiumの場合ラベルを指定する方法なのがどうかと感じた。試した限りでは、同じラベルのボタンを複数用意すると上位のものがクリックされた。
同様に、TextViewの値をチェックしたい場合、意図しないTextViewやButtonのラベルや判定に利用されテストがパスしてしまうことがあった。
なので、実際に利用するならNativeDriverかなと感じた。