Espresso Intent
代码来源于 youtube 视频:https://www.youtube.com/watch?v=xxO0Z9GzcBU&list=PLgCYzUzKIBE_ZuZzgts135GuLQNX5eEPk&index=10
IntentsTestRule 是继承 ActivityTestRule, 它是为了更加方便使用 Espresso-Intents 的 api 用于 UI 测试。
Matcher 可以用于拦截 intents, 但是需要同时配合 intended()
和 intending()
函数一起使用。
其中 intending(expectedIntent).respondWith(activityResult)
类似于 when ... return ...
,当调用 expectedIntent, 返回 activityResult 结果。
例如:
// GIVEN
val expectedIntent: Matcher<Intent> = allOf(
hasAction(Intent.ACTION_PICK),
hasData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
)
val activityResult = createGalleryPickActivityResultStub()
// 要调整的 intent, 要验证的返回结果 activityResult
// 类似于 when ... return ...
intending(expectedIntent).respondWith(activityResult)
// Execute and Verify
onView(withId(R.id.button_open_gallery)).perform(click())
intended(expectedIntent)
主要用于获取 Instrumentation 和 application context
如果是用于获取 application context 可以用 ApplicationProvider.getApplicationContext
来替代。
链接:https://developer.android.com/reference/kotlin/androidx/test/InstrumentationRegistry
参加 1.2 Matcher>