LoginSignup
3
4

More than 5 years have passed since last update.

Androidでユニットテストを始めるメモ3

Posted at

前回の続き
http://qiita.com/kojimamasahiro/items/9a925975b2c5f632ed09

Robolectricしたい。
http://robolectric.org/

公式サンプル
https://github.com/robolectric/robolectric-samples

インストール

depences {
    // robolectric
    testCompile "org.robolectric:robolectric:3.1.4"
}

テストファイルはtestディレクトリ以下に置きます。

使い方

Activityのテスト

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class MainActivityTest {

    private TextView mText;
    private ImageView mImage;
    private Button mButton;

    @Before
    public void setUp() {
        // viewの取得
        Activity activity = Robolectric.setupActivity(MainActivity.class);
        mText = (TextView) activity.findViewById(R.id.text);
        mButton = (Button) activity.findViewById(R.id.button);
        mImage = (ImageView) activity.findViewById(R.id.image);
    }

    @Test
    public void trueNextActivity() {
        // ボタンのclick(別のアクティビティに遷移させるようにしていた場合)
        mButton.performClick();

        // 遷移先のActivityがあるか
        ShadowApplication application = shadowOf(RuntimeEnvironment.application);
        assertThat("Next activity has started", application.getNextStartedActivity(), is(notNullValue()));
    }

    @Test
    public void falseNextActivity() {
        // ボタンをclickしていないのでなし
        ShadowApplication application = shadowOf(RuntimeEnvironment.application);
        assertThat("Next activity should not started", application.getNextStartedActivity(), is(nullValue()));
    }
}

Shadowクラス

shadowクラス

// 実オブジェクトを指定
@Implements(MyTextView.class)
public class ShadowMyTextView {

    // メソッドを変更
    @Implementation
    public String myMethod() {
        return "my name is ShadowMyTextView";
    }
}
実オブジェクト
public class MyTextView {

    public String myMethod() {
        return "my name is MyTextView";
    }
}
Configのshadowsに指定する

@RunWith(RobolectricTestRunner.class)
@Config(sdk = 21, constants = BuildConfig.class, shadows = {ShadowMyTextView.class})
public class MyTextViewTest {


    @Test
    public void shadowMyTextView() {
        // メソッドが書き換えられている
        assertThat(new MyTextView().myMethod(), is("my name is ShadowMyTextView"));
    }
}

他、config propertiesやresourcesなどの設定方法もあるけど、割愛

おわりに

テストに関する投稿はこれでいったんおしまい。
アプリを新規でつくる場合は、積極的に取り入れていきたい。
ただ、既存のアプリに取り入れるのは少しつらい。
もし、いい感じに取り入れる方法があればまた紹介したい。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4