Androidの統合テスト:エスプレッソ意図を使用してonActivityResultの意図のClipDataを模擬する方法

ワイヤンヘイン:

私はKotlinを使用してAndroidアプリケーションを開発しています。私はエスプレッソのフレームワークを使用して自分のアプリケーションのための統合テストを書いています。今、私はonActivityResultコールバックの意図のClipDataを模擬するために苦労しています。私はエスプレッソ-意図エスプレッソフレームワークの使用を意図をからかっています。

以下は、私の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コールバックメソッドに見ることができるように、私は意思の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)

私の質問は、私はそれを嘲笑する意図にクリップデータを渡すことができる方法ですか?

Pavneet_Singh:

作成ClipDataなどのオブジェクトを

  1. 作成ClipDescriptionClipData.Itemオブジェクト

    val clipDescription = ClipDescription("Dummy", arrayOf(ClipDescription.MIMETYPE_TEXT_PLAIN))
    
    val uri = Uri.parse("http://www.google.com");
    
    val clipItem = ClipData.Item(uri)
    
  2. 作成しClipDataたオブジェクトをとして意図オブジェクト上に設定します。

    val _clipData = ClipData(clipDescription, clipItem)
    
    resultData.clipData = _clipData
    

あなたは使用して複数の項目を追加することができますのaddItemを通り_clipData.addItem(clipItem)あなたは他のコンストラクタおよび方法を使用することができますClipDescriptionClipData.Itemより多くのデータを追加するためのクラスを。

代わりに、あなたは実際のモックオブジェクトを作成することができますし、あなたのモックフレームワークごとに、同じオブジェクトの使用に対応するメソッドをモック。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=320918&siteId=1