我正在使用expresso在kotlin中写下测试,当我运行它时,espresso似乎会在测试失败或进入下一个测试时保持应用程序状态。我想使这些测试独立进行,而不要按顺序运行它们或在验收测试中实施if条件。因此,我一直在寻找如何杀死它的方法,就像该应用程序是具有appium功能的fullReset
一样。
我尝试使用ORCHESTRATOR
测试运行程序实现,但是一旦将它放入测试选项gradle sync中,它就会显示没有要运行的测试,即使我确实具有@Test注解标记,但是一旦删除它我能够运行测试。
我什至尝试在每次测试之前将.edit()
.clear()
和.commit()
放在共享首选项中,但这仍然无济于事。下一次测试开始时,该应用将继续运行,而不是重新启动。
然后我再次尝试Espresso.pressback()
,尽管确实如此,但该应用程序仍仅恢复运行
在@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()
// ...
}
testInstrumentationRunnerArguments clearPackageData: 'true'
在项目等级文件中的defaultConfig下,对我有用。
但是它确实需要orchestrator
,我建议在运行测试之前清理并重建。
这是我添加协调器的方式:
androidTestUtil 'androidx.test:orchestrator:1.1.0'
作为依赖项
execution 'ANDROIDX_TEST_ORCHESTRATOR'
正在测试的选项。