Android检测测试活动是否通过onActivityResult回调打开
我正在使用Kotlin开发一个Android应用程序。我正在为我的代码编写检测测试。现在,我正在努力为一个特定的功能编写一个仪器化测试。下面是我想为其编写测试的场景 我有三个活动,LoginActivity、RegisterActivity和HomeActivity。LoginActivity使用startActivityForResult方法启动RegisterActivity。然后在RegisterActivity中,在注册之后,它使用finishActivity方法完成活动。因此调用LoginActivity类的onActivityResult回调。在onActivityResult中,它使用startActivity方法启动HomeActivity 那么,当注册在RegisterActivity中完成时,如何测试HomeActivity是否在LoginActivity的onActivityResult回调中启动 这是我目前试图测试该特定功能的不完整代码Android检测测试活动是否通过onActivityResult回调打开,android,kotlin,instrumented-test,Android,Kotlin,Instrumented Test,我正在使用Kotlin开发一个Android应用程序。我正在为我的代码编写检测测试。现在,我正在努力为一个特定的功能编写一个仪器化测试。下面是我想为其编写测试的场景 我有三个活动,LoginActivity、RegisterActivity和HomeActivity。LoginActivity使用startActivityForResult方法启动RegisterActivity。然后在RegisterActivity中,在注册之后,它使用finishActivity方法完成活动。因此调用Log
@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,我刚刚更新了问题,添加了更多的代码片段。你能再看一下吗?