Android集成测试:如何使用Expresso intent模拟onActivityResult意图的ClipData
我正在使用Kotlin开发一个Android应用程序。我正在使用Expresso框架为我的应用程序编写集成测试。现在,我正在努力模仿onActivityResult回调的ClipData。我正在使用expresso框架的expresso意图模拟该意图 下面是我的onActivityResult回调方法的实现Android集成测试:如何使用Expresso intent模拟onActivityResult意图的ClipData,android,android-intent,integration-testing,Android,Android Intent,Integration Testing,我正在使用Kotlin开发一个Android应用程序。我正在使用Expresso框架为我的应用程序编写集成测试。现在,我正在努力模仿onActivityResult回调的ClipData。我正在使用expresso框架的expresso意图模拟该意图 下面是我的onActivityResult回调方法的实现 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
Log.i(TAG, "Start handleGalleryActivityResult")
if (data?.clipData?.itemCount == null) {
return
}
if (data?.clipData?.itemCount as Int > 0) {
Log.i(TAG, "handleGalleryActivityResult: clipData count is greater than zero")
for (i in 0 until data?.clipData?.itemCount as Int) {
Log.i(TAG, "Processing index ${i}")
if (data?.clipData?.getItemAt(i)?.uri != null) {
val file: File = File(data?.clipData?.getItemAt(i)?.uri?.path)
Log.i(TAG, "Picked gallery file ${data?.clipData?.getItemAt(i)?.uri?.path}")
} else {
Log.i(TAG, "Picked gallery file at index ${i} is null")
}
}
}
}
正如您在onActivityResult回调方法中看到的,我正在检索intent的clipData
我正在编写一个模拟返回意图的测试,如下所示
@Test fun filesAreUploadedToServerWhenPickedUpFromGallery() {
this.launchActivityWithIntent()
val resultData = Intent()
val result = Instrumentation.ActivityResult(Activity.RESULT_OK, resultData)
intending(IntentMatchers.hasAction(Intent.ACTION_PICK)).respondWith(result)
onView(withId(R.id.camera_image_btn_gallery)).perform(click())
//the rest of the code goes here
}
正如您在我的代码中所看到的,我正在模拟这样返回的意图
intending(IntentMatchers.hasAction(Intent.ACTION_PICK)).respondWith(result)
我的问题是如何将剪辑数据传递给模拟它的意图?将
ClipData
对象创建为
clipddescription
和ClipData.Item
对象
val clipDescription = ClipDescription("Dummy", arrayOf(ClipDescription.MIMETYPE_TEXT_PLAIN))
val uri = Uri.parse("http://www.google.com");
val clipItem = ClipData.Item(uri)
ClipData
对象,并在intent对象上将其设置为:
val _clipData = ClipData(clipDescription, clipItem)
resultData.clipData = _clipData
\u clipData.addItem(clipItem)
添加更多项目。您可以使用其他构造函数以及和类的方法来添加更多数据
或者,您可以根据模拟框架创建实际的模拟对象,并模拟相同使用对象的相应方法