Espresso:每次测试开始前,我如何杀死应用程序

问题描述 投票:0回答:2

我正在使用expresso在kotlin中写下测试,当我运行它时,espresso似乎会在测试失败或进入下一个测试时保持应用程序状态。我想使这些测试独立进行,而不要按顺序运行它们或在验收测试中实施if条件。因此,我一直在寻找如何杀死它的方法,就像该应用程序是具有appium功能的fullReset一样。

我尝试使用ORCHESTRATOR测试运行程序实现,但是一旦将它放入测试选项gradle sync中,它就会显示没有要运行的测试,即使我确实具有@Test注解标记,但是一旦删除它我能够运行测试。

我什至尝试在每次测试之前将.edit() .clear().commit()放在共享首选项中,但这仍然无济于事。下一次测试开始时,该应用将继续运行,而不是重新启动。

然后我再次尝试Espresso.pressback(),尽管确实如此,但该应用程序仍仅恢复运行

kotlin android-espresso instrumentation android-instrumentation
2个回答
0
投票

@Before处清除首选项可能为时已晚,因为在活动开始后调用它。您可以尝试在活动开始之前创建自己的测试规则:

class MyActivityTestRule : ActivityTestRule<MyActivity>(MyActivity::class.java, false, true) {

    val preferences = ApplicationProvider.getApplicationContext<Application>()
            .getSharedPreferences(NAME, MODE)
    // or getDefaultSharedPreferences(), depends on your app!

    override fun beforeActivityLaunched() {
        preferences.edit().clear().commit()
    }
}

然后在测试中设置规则:

class MyTest {

    @get:Rule val myTestRule = MyActivityTestRule()

    // ...
}

0
投票
testInstrumentationRunnerArguments clearPackageData: 'true' 

在项目等级文件中的defaultConfig下,对我有用。

但是它确实需要orchestrator,我建议在运行测试之前清理并重建。

这是我添加协调器的方式:

androidTestUtil 'androidx.test:orchestrator:1.1.0'

作为依赖项

execution 'ANDROIDX_TEST_ORCHESTRATOR'

正在测试的选项。

© www.soinside.com 2019 - 2024. All rights reserved.