2015/01/17

Android:Robotium

はじめに.

RobotiumはAndroidのブラックボックステストを自動化するUIテストフレームワーク.
シナリオを手軽にかけて導入も非常に簡単である. 老舗のテストフレームワークでもあり動作は安定している.

本稿はRobotiumを導入したレポートである.

確認環境は次の通り.

  • Robotium: 5.2.1
  • Android Studio 1.0
  • Mac 10.9.5

環境準備

環境準備は次のコードをgradleに追加するのみで完了.

dependencies {
    ...
    androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.2.1'
}

簡単. あとはテストコードを書いていく.

サンプルコード

RobotiumではメインとなるSoloクラスをsetUpで初期化する.
下記のコードはテスト開始時にMainActivityを起動し, テスト終了時にfinishさせる簡易なものである.

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
    private Solo solo = null;

    public MainActivityTest() {
        super(MainActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        solo = new Solo(getInstrumentation(), getActivity());
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        solo.finishOpenedActivities();
        super.tearDown();
    }

    public void testMainActivity() {
        // ここにシナリオを記述する
    }
}

TestCaseのそれと同じく, testメソッドにシナリオを書いていく.
下記は次の手順をシナリオ化したもの.

  1. MainActivityが起動できているかを検査
  2. id.buttonをクリック
  3. ダイアログオープンをウェイト
  4. ダイアログに表示されているテキストを検査
  5. “Yes”を押下
  6. 表示されるToastに表示されている
    public void testMainActivity() {
        solo.assertCurrentActivity("wrong activity", MainActivity.class);
        solo.waitForActivity(MainActivity.class);
        solo.clickOnView(solo.getCurrentActivity().findViewById(R.id.button));
        solo.waitForDialogToOpen();
        Assert.assertTrue("wrong dialog text", solo.searchText("Test"));
        solo.clickOnButton("Yes");
        Assert.assertTrue("wrong toast text", solo.searchText("Hello!"));
    }

RobotiumはInstrumentationTestCaseがベースであるため, Android Testing Frameworkのそれと同じように扱える.
普段通りAndroidTestとして実行すればRobotiumのテストが実行できる.

以上.