【问题标题】:Android Espresso : correctly test closing app with pressBackAndroid Espresso:使用 pressBack 正确测试关闭应用程序
【发布时间】:2019-06-07 17:41:07
【问题描述】:

我正在尝试使用 espresso 进行一些导航测试。实际上,我想检查应用程序是否已在重新启动后使用主屏幕上的后退键关闭。 这是我正在使用的一段代码。

class NavigationTests  {
    @get:Rule
    val mActivityTestRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)

    @Test
    fun backOnEmptyHomeMustExit(){
        Espresso.pressBack()
        Assert.assertTrue(mActivityTestRule.activity==null)
    }
}

实际上,由于以下异常,我的测试失败了:

android.support.test.espresso.NoActivityResumedException: 按下并杀死应用程序

我在 stackoverflow 中看到了一些关于使用 try/catch 块的建议,但我想知道是否有更合适的方法来做到这一点?

How to test android app has closed with Espresso

Android - Espresso test with pressBack

编辑: 所以看来这个模板是要走的路:

try {
    pressBack();
    fail("Should have thrown NoActivityResumedException");
} catch (NoActivityResumedException expected) { 
}

【问题讨论】:

  • 捕获异常正是 espresso 自己的单元测试所做的:android.googlesource.com/platform/frameworks/testing/+/…。搜索“pressBack”。
  • 好的,所以我想没有比这更好的方法了 try { pressBack(); fail("Should have thrown NoActivityResumedException"); } catch (NoActivityResumedException expected) { } 无论如何谢谢

标签: exception-handling android-espresso back


【解决方案1】:

简答

使用Espresso.pressBackUnconditionally()

我已经检查了版本 3.1.1

示例

Espresso.pressBackUnconditionally()
assertTrue(activityRule.activity.isDestroyed)

探索

正如您在Expresso source code 中看到的,它将false 标志传递给PressBackAction,因此它不会引发异常。

【讨论】:

  • Rule是ActivityScenarioRule怎么办?
  • 获取活动并检查isDestroyed,见stackoverflow.com/questions/61953249/…
  • 使用 ActivityScenarioRule:assertEquals(Lifecycle.State.DESTROYED, activityRule.getScenario().state)
猜你喜欢
  • 1970-01-01
  • 2018-07-06
  • 2015-04-17
  • 2012-10-20
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多