Instrumentation用单独的意图测试Android活动

时间:2017-05-15 21:30:17

标签: android android-intent android-espresso android-testing android-instrumentation

我正在尝试以单独的方式测试一个Activity,但是我遇到了问题,因为部分测试要求我验证正在测试的Activity通过Intent启动另一个Activity。

我正在寻找的是拦截Intent的一些方法,以便我可以验证隔离的Activity实际上是否尝试启动下一个Activity但没有实际启动下一个Activity。

我遇到的问题是,当下一个Activity启动时,它会崩溃,因为我无法模拟它需要的一些关键事项。如果有一种方法可以在测试期间拦截Intent,那么下一个Activity就永远不会启动。

我正在寻找甚至可能吗?

1 个答案:

答案 0 :(得分:0)

最初我尝试使用Espresso的intent()和intending()方法,以验证在没有实际启动活动的情况下发送Intents(如下所述:https://collectiveidea.com/blog/archives/2015/08/11/stub-your-android-intents

但是我没有运气这么做。我最终使用的是使用ActivityMonitor来完成这项工作。

以下是一个例子:

private void registerActivityMonitorAndStartActivity(String name) {
    Instrumentation.ActivityMonitor am = new 
    Instrumentation.ActivityMonitor(name, null, true);
    InstrumentationRegistry.getInstrumentation().addMonitor(am);

    mActivityTestRule.launchActivity(new Intent());

    int count = 0;

 while(!InstrumentationRegistry.getInstrumentation().checkMonitorHit(am, 1) && count < 50000) {
    count++;
}
    Timber.d("Count = " + String.valueOf(count));
assertTrue(InstrumentationRegistry.getInstrumentation().checkMonitorHit(am, 1));
}

这基本上有一个活动监视器监视,用于发送到您按名称指定的活动的意图。 while循环一直运行,直到活动监视器看到命中,然后在超时被击中时中断或中断。