Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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/6/asp.net-mvc-3/4.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集成测试:如何使用Expresso intent模拟onActivityResult意图的ClipData_Android_Android Intent_Integration Testing - Fatal编程技术网

Android集成测试:如何使用Expresso intent模拟onActivityResult意图的ClipData

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

我正在使用Kotlin开发一个Android应用程序。我正在使用Expresso框架为我的应用程序编写集成测试。现在,我正在努力模仿onActivityResult回调的ClipData。我正在使用expresso框架的expresso意图模拟该意图

下面是我的onActivityResult回调方法的实现

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
    
  • 您可以使用as
    \u clipData.addItem(clipItem)
    添加更多项目。您可以使用其他构造函数以及和类的方法来添加更多数据

    或者,您可以根据模拟框架创建实际的模拟对象,并模拟相同使用对象的相应方法