Android - 使用pressBack进行Espresso测试

时间:2017-03-27 08:02:44

标签: android android-espresso

我正在尝试使用Espresso框架测试我的应用程序。应该测试在主活动中按下时是否退出应用程序,以及在从主活动调用另一个活动然后再按下时是否显示主应用程序。

public class MainActivityTest {
    @Rule
    public IntentsTestRule<MainActivity> intentsTestRule = new IntentsTestRule<>(
            MainActivity.class
    );

    @Test
    public void test_pressBack() {
        try {
            pressBack();
            fail();
        } catch (NoActivityResumedException exc) {
            // test successful
        }
    }

    @Test
    public void test_anotherActivity_pressBack() {
        onView(withId(R.id.button1)).perform(click());
        pressBack();
        intended(hasComponent(new ComponentName(getTargetContext(), MainActivity.class)));
    }
}

对于第一个场景(退出应用),我正在捕捉NoActivityResumedException,但这似乎不是正确的方法。

对于第二种情况(返回主要活动),我收到意图错误:

android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.

IntentMatcher: has component: has component with: class name: is "myPackage.MainActivity" package name: an instance of java.lang.String short class name: an instance of java.lang.String

Matched intents:[]

Recorded intents:
-Intent { cmp=myPackage/.AnotherActivity} handling packages:[[myPackage]])

1 个答案:

答案 0 :(得分:1)

关于第一次测试-您可以使用

Espresso.pressBackUnconditionally()

那是引发NoActivityResumedException异常。然后检查您的活动是否正在运行/处于前台。

关于第二次测试:

intended(hasComponent(MainActivity::class.qualifiedName))

为我工作(Kotlin中的代码)。因此,基本上使用hasComponent(String className)代替hasComponent(ComponentName componentName)