Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/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
Android检测测试活动是否通过onActivityResult回调打开_Android_Kotlin_Instrumented Test - Fatal编程技术网

Android检测测试活动是否通过onActivityResult回调打开

Android检测测试活动是否通过onActivityResult回调打开,android,kotlin,instrumented-test,Android,Kotlin,Instrumented Test,我正在使用Kotlin开发一个Android应用程序。我正在为我的代码编写检测测试。现在,我正在努力为一个特定的功能编写一个仪器化测试。下面是我想为其编写测试的场景 我有三个活动,LoginActivity、RegisterActivity和HomeActivity。LoginActivity使用startActivityForResult方法启动RegisterActivity。然后在RegisterActivity中,在注册之后,它使用finishActivity方法完成活动。因此调用Log

我正在使用Kotlin开发一个Android应用程序。我正在为我的代码编写检测测试。现在,我正在努力为一个特定的功能编写一个仪器化测试。下面是我想为其编写测试的场景

我有三个活动,LoginActivity、RegisterActivity和HomeActivity。LoginActivity使用startActivityForResult方法启动RegisterActivity。然后在RegisterActivity中,在注册之后,它使用finishActivity方法完成活动。因此调用LoginActivity类的onActivityResult回调。在onActivityResult中,它使用startActivity方法启动HomeActivity

那么,当注册在RegisterActivity中完成时,如何测试HomeActivity是否在LoginActivity的onActivityResult回调中启动

这是我目前试图测试该特定功能的不完整代码

@RunWith(AndroidJUnit4::class)
class RegisterFormTest
{
    @Rule @JvmField
    val registerActivityRule: ActivityTestRule<RegisterActivity> = ActivityTestRule<RegisterActivity>(RegisterActivity::class.java)

    @Before
    fun setUp() {
    }

    @Test fun registerFormStartsHomeActivityAfterLogin() {
        Intents.init()
        FakeAuthService.SCENARIO_UNDER_TEST = FakeAuthService.SCENARIO_REGISTER_SUCCESSFUL

        onView(withId(R.id.register_button_submit)).perform(click())

        val accessToken = (registerActivityRule.activity.application as MockApplicationController).getLocalStorage()?.getString(ApplicationController.PREF_KEY_ACCESS_TOKEN, "")
        Assert.assertEquals(FakeAuthService.FAKE_ACCESS_TOKEN, accessToken)

        Thread.sleep(1000)


    Intents.intended(IntentMatchers.hasComponent(HomeActivity::class.java.name))

    Intents.release()

    }
}
这是LoginActivity类中的onActivityResult回调

setResult(Activity.RESULT_OK)
finish()
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == RegisterActivity.ACTIVITY_CODE && resultCode == Activity.RESULT_OK) {
            startHomeActivity()
        }
    }
这就是错误所在

2019-10-21 14:51:08.642 25433-25461/com.example.memento E/TestRunner:----开始异常----- 2019-10-21 14:51:08.642 25433-25461/com.example.memento E/TestRunner:junit.framework.AssertionFailedError:想要匹配1个意图。实际上匹配了0个意图

IntentMatcher: has component: has component with: class name: is "com.example.myapp.HomeActivity" package name: an instance of java.lang.String short class name: an instance of java.lang.String

Matched intents:[]

Recorded intents:[]
    at junit.framework.Assert.fail(Assert.java:50)
    at androidx.test.espresso.intent.VerificationModes$Times.verify(VerificationModes.java:80)
    at androidx.test.espresso.intent.Intents.internalIntended(Intents.java:346)

当我使用实际设备手动测试时,一切都正常工作。

考虑在
注册表活动中设置结果
Intent
中传递一个标志,并在
setResult(OK,Intent)
中传递
Intent
。该
Intent
将包含指示注册已完成的标志

在LoginActivity的
onActivityResult()
中,从传入
RegisterActivity
Intent
中提取标志(布尔值),并在用于启动
HomeActivity
Intent
中传递该标志。检查
HomeActivity
onCreate()
中的
Intent
,并验证是否通过了指示注册已完成的标志


如果收到该标志,请将
TextView
的值设置为您选择的某个随机字符串,以指示,然后使用浓缩咖啡匹配器检查该
TextView
的文本是否与您的随机字符串匹配

嗨@Jarvis,我刚刚更新了问题,添加了更多的代码片段。你能再看一下吗?