6

Espresso を使用して、アクティビティをバックグラウンドに送信し、ホーム ボタンを使用してテストし、フォアグラウンドで再び起動していくつかのチェックを行います。

@EspressoTest
public void test() {
    onSomeView().check(matches(isDisplayed()));
    getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);

    Context context = getInstrumentation().getTargetContext();
    Intent intent = new Intent(context, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);

    onSomeView().check(matches(isDisplayed()));
}

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);例外によって提案されたもの を使用する必要がありましたが、それとは別に、ランチャー アクティビティとして開始するか、または を使用してテストしましFLAG_ACTIVITY_REORDER_TO_FRONTたが、ビューは表示されません。テストに合格したにもかかわらず。

4

3 に答える 3

8

わかりました。最初に、getActivity によって提供されるアクティビティ コンテキストを使用する必要があります。次に、インテントを使用して、HOME カテゴリと FLAG_ACTIVITY_REORDER_TO_FRONT を使用して、バックグラウンドとフォアグラウンドでアクティビティを送信できます。

private void goHome(Activity activity) {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    activity.startActivity(intent);
}

private void bringToForeground(Activity activity) {
    Intent intent = new Intent(activity, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    activity.startActivity(intent);
}

@EspressoTest
public void test() {
    //do some ui stuff to ensure the activity is up and running
    goHome(getActivity());
    // eventually sleep, or implement an idling resource
    bringToForeground(getActivity());
    // do some ui tests
}
于 2014-04-29T12:57:05.780 に答える