Android
Espresso

EspressoでIntentのExtraにデータをわたしてActivityを起動する話

More than 1 year has passed since last update.

Espressoで、Activityの単体テストをする場合、IntentのExtraで対象となるActivityに情報を渡したいときがあります。

そういった場合は、ActivityTestRuleをコンストラクタで、3番目の引数にfalseを渡せば、勝手にActivityを起動しなくなります。

@RunWith(AndroidJUnit4.class)
public class FooActivityTest {

    @Rule
    public ActivityTestRule<FooActivity> activityRule = new ActivityTestRule<>(FooActivity.class, false, false);

    :
}

この引数は省略したときはtrueになり、その場合、@Testメソッド毎に、最初の@Beforeメソッドが実行される前に、Activityが起動します。

falseを指定すると、Activityが自動的に起動しなくなるので、@BeforeメソッドでIntentを使って明示的に起動します。

@RunWith(AndroidJUnit4.class)
public class FooActivityTest {

    @Rule
    public ActivityTestRule<FooActivity> activityRule = new ActivityTestRule<>(FooActivity.class, false, false);

    :

    @Before
    public void setup() {
        :
        Intent intent = new Intent();
        intent.putExtra("bar", 1);  //必要なデータを渡す
        activityRule.launchActivity(intent);
    }

    :
}

このとき、ClassNameなどは、ActivityTestRuleのlaunchActivity()メソッド内でセットしてくれるので、必要なExtraの設定だけでかまいません。

@Beforeメソッドが複数ある場合は、実行順序に気をつけなければならなくなるので、ひとつのメソッドにまとめた方が良さそうです。