2017-05-22 1 views
2

übergeben wird Ich muss die Absicht der Kamera stub, indem Sie eine Bilddatei auf dem Weg in der Absicht extra erstellt. Espresso kann nur mit Aktivitätsresultat reagieren. Wo kann ich den Vorgang ausführen, um die Datei am übergebenen Pfad von der Absicht extra zu erstellen.Espresso Test der Kamera Absicht, wenn Bilduren als Extra

-Code für Kamera für stubbing Absicht in Test

Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, null); intending(hasAction(MediaStore.ACTION_IMAGE_CAPTURE)).respondWith(result);

Antwort

3

Sie

File destination = new File(Environment.getExternalStorageDirectory(), "app_name" + System.currentTimeMillis() + ".jpg");

imageUri = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".fileprovider", destination); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent, AppConstants.REQUEST_CODE_CAMERA);

-Code starten müssen eine IntentCallback erstellen, um die Uri Wert abzufangen und eine sparen Beispielbild dort.

Probe in Kotlin

intentCallback = IntentCallback { 
     if (it.action == "android.media.action.IMAGE_CAPTURE") { 
      it.extras.getParcelable<Uri>("output").run { 
       val inStream = Resources.getResource(sampleImageFileName).openStream() 
       val outStream = activity.contentResolver.openOutputStream(this) 
       ByteStreams.copy(inStream, outStream) 
      } 
     } 
    } 

Sie benötigen Rückruf vor dem Vorsatz Triggerereignis

IntentMonitorRegistry.getInstance().addIntentCallback(intentCallback) 

registrieren Und nicht zu vergessen, am Ende deregistrieren

IntentMonitorRegistry.getInstance().removeIntentCallback(intentCallback) 
3

Ismael Antwort ist perfekt. Für diejenigen, die nach einer Lösung in Java suchen, hier ist es.

intending(hasAction(MediaStore.ACTION_IMAGE_CAPTURE)).respondWith(
      new Instrumentation.ActivityResult(Activity.RESULT_OK, null)); 

IntentCallback intentCallback = new IntentCallback() { 
     @Override 
     public void onIntentSent(Intent intent) { 
      if (intent.getAction().equals("android.media.action.IMAGE_CAPTURE")) { 
       try { 
        Uri imageUri = intent.getParcelableExtra(MediaStore.EXTRA_OUTPUT); 
        Context context = InstrumentationRegistry.getTargetContext(); 
        Bitmap icon = BitmapFactory.decodeResource(
          context.getResources(), 
          R.mipmap.ic_launcher); 
        OutputStream out = getTargetContext().getContentResolver().openOutputStream(imageUri); 
        icon.compress(Bitmap.CompressFormat.JPEG, 100, out); 
        out.flush(); 
        out.close(); 
       } catch (IOException e) { 
        GenericUtility.handleException(e); 
       } 
      } 
     } 
    }; 
    IntentMonitorRegistry.getInstance().addIntentCallback(intentCallback); 

//Perform action here 
onView(withId(R.id.tv_take_photo)).perform(click());