Scirocco を使ってみた

昨日のNativeDriverに引き続き、Androidのテストフレームワーク関連。
先日行われた「第1回Androidテスト祭り」で知ったSciroccoを使ってみた。

scirocco

http://code.google.com/p/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かなと感じた。