Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 浓缩咖啡:如何在每次测试开始前关闭应用程序_Kotlin_Android Espresso_Instrumentation_Android Instrumentation - Fatal编程技术网

Kotlin 浓缩咖啡:如何在每次测试开始前关闭应用程序

Kotlin 浓缩咖啡:如何在每次测试开始前关闭应用程序,kotlin,android-espresso,instrumentation,android-instrumentation,Kotlin,Android Espresso,Instrumentation,Android Instrumentation,我正在使用expresso在kotlin中写下测试,当我运行它时,espresso似乎会保持应用程序状态,就像测试失败或进入下一个测试时一样。我希望使这些测试独立,而不是按顺序运行它们,或者在验收测试中实现if条件。因此,我正在研究如何以类似于appium的fullReset功能的方式杀死它 我尝试使用ORCHESTRATOR测试运行程序实现,但一旦我将其放入测试选项gradle sync中,它就会显示没有要运行的测试,即使我确实有@test annotation标记,但一旦我删除它,我就能够运

我正在使用expresso在kotlin中写下测试,当我运行它时,espresso似乎会保持应用程序状态,就像测试失败或进入下一个测试时一样。我希望使这些测试独立,而不是按顺序运行它们,或者在验收测试中实现if条件。因此,我正在研究如何以类似于appium的
fullReset
功能的方式杀死它

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

在每次测试之前,我甚至试着在SharedReference中放置
.edit()
.clear()
.commit()
,但同样没有帮助。下一次测试开始时,应用程序将恢复而不是重新启动


然后我再次尝试了
Espresso.pressback()
,但尽管如此,该应用程序仍然只会恢复

@之前清除首选项对您来说可能太晚了,因为它是在活动启动后调用的。您可以尝试在活动开始之前创建自己的测试规则:

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()
    }
}
在项目等级文件的defaultConfig下,为我工作

但是它确实需要
编排器
,我建议在运行测试之前进行清理和重建

下面是我如何添加orchestrator的:

androidTestUtil 'androidx.test:orchestrator:1.1.0'
作为依赖项

execution 'ANDROIDX_TEST_ORCHESTRATOR'

在测试选项下。

如果我使用的是Android而不是AndroidX,如何导入应用程序ProviderA
InstrumentationRegistry.getInstrumentation().getTargetContext()
?它应该为您提供应用程序上下文。当我应用此代码时,只要我签名,它就会将我重定向回登录。所以看起来,即使启动这个自定义ActivityRule或将其清除到@Before中,也会给我相同的输出,但我仍然没有在适当的时候清除它,我猜我的项目不在Androidx中!我还没有测试过。但基本上,测试选项的“ANDROID_TEST_ORCHESTRATOR”和依赖项的“com.ANDROID.support.TEST.ORCHESTRATOR.1.0.2”是相同的。让我检查一下现在提供的字符串模块符号“com.ANDROID.support.TEST.ORCHESTRATOR.1.0.2”是无效的。示例注释:“org.gradle:gradle core:2.2”,“org.mockito:mockito core:1.9.5:javadoc”。正确使用“:”而不是“.”com.android.support.test.orchestrator:1.0.2”
androidTestUtil 'androidx.test:orchestrator:1.1.0'
execution 'ANDROIDX_TEST_ORCHESTRATOR'