Prueba onActivityResult ()
Tengo la siguiente Actividad:
package codeguru.startactivityforresult; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class StartActivityForResult extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.startButton = (Button) this.findViewById(R.id.start_button); this.startButton.setOnClickListener(onStart); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { int result = data.getIntExtra(StartActivityForResult.this.getString(R.string.result), -1); String msg = "requestCode=" + requestCode + ", resultCode=" + resultCode + ", result=" + result; Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); } private View.OnClickListener onStart = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(StartActivityForResult.this, ChildActivity.class); StartActivityForResult.this.startActivityForResult(intent, R.id.child_request); } }; private Button startButton = null; }
Y la siguiente prueba JUnit:
- ¿Cómo probar una ListActivity burlándose de su contentProvider y así aislar la prueba de la base de datos?
- ProviderTestCase2.getProvider () es nulo
- Escribir / crear archivos dentro del contexto de la instrumentación de Android
- ¿Cómo probar la función de sincronización de ejecución en android?
- Prueba de una biblioteca de Android con Robolectric
package codeguru.startactivityforresult; import android.app.Activity; import android.app.Instrumentation; import android.test.ActivityInstrumentationTestCase2; import android.test.UiThreadTest; import android.widget.Button; import junit.framework.Assert; public class StartActivityForResultTest extends ActivityInstrumentationTestCase2<StartActivityForResult> { public StartActivityForResultTest() { super(StartActivityForResult.class); } @Override public void setUp() throws Exception { super.setUp(); this.setActivityInitialTouchMode(false); this.activity = this.getActivity(); this.startButton = (Button) this.activity.findViewById(R.id.start_button); } @Override public void tearDown() throws Exception { this.activity.finish(); super.tearDown(); } @UiThreadTest public void testStartButtonOnClick() { Assert.assertTrue(this.startButton.performClick()); Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, null); Assert.assertNotNull(result); Instrumentation.ActivityMonitor am = new Instrumentation.ActivityMonitor(ChildActivity.class.getName(), result, true); Assert.assertNotNull(am); Activity childActivity = this.getInstrumentation().waitForMonitorWithTimeout(am, TIME_OUT); Assert.assertNotNull(childActivity); Assert.fail("How do I check that StartActivityForResult correctly handles the returned result?"); } private Activity activity = null; private Button startButton = null; private static final int TIME_OUT = 5 * 1000; // 5 seconds }
Como se puede ver, me di cuenta de cómo simular un resultado utilizando Instrumentation.ActivityResult
y Instrumentation.ActivityMonitor
. ¿Cómo puedo comprobar que StartActivityForResult.onActivityResult()
maneja correctamente este resultado?
- Prueba de AdMob antes de publicar
- Espresso prueba pegado / inactivo después de realizar (haga clic ()) en el botón en ViewAnimator
- Saltar prueba para la variante de construcción específica en Android + Gradle?
- Prueba de un ContentProvider personalizado en Android
- Android en las pruebas de suscripción de aplicaciones
- Cómo inyectar el evento de clic con Android UiAutomation.injectInputEvent
- Prueba de Android fuera del espacio de almacenamiento
- ¿Cómo crear sombras personalizadas en robolectric 3.0?
Para probar onActivityResult () en su clase de prueba, todo lo que necesita hacer es:
- Cree un ActivityMonitor que capture la creación de ChildActivity y reajuste el ActivityResult.
- Simular el clic del botón que inicia ChildActivity para el resultado.
- Haga alguna afirmación sobre el estado y el simulacro ActivityResult.
Ejemplo StartActivityForResult:
public class StartActivityForResult extends Activity { private boolean activityResultIsReturned = false; private String activityResult = null; ... ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { activityResultIsReturned = true; activityResult = data.getStringExtra("result"); ... ... } ... ... }
Ejemplo StartActivityForResultTest:
public class StartActivityForResultTest extends ActivityInstrumentationTestCase2<StartActivityForResult> { ... ... public void testOnActivityResult() { // Get current Activity and check initial status: StartActivityForResult myActivity = getActivity(); assertFalse(myActivity.getActivityResultIsReturned()); assertNull(myActivity.getActiityResult()); // Mock up an ActivityResult: Intent returnIntent = new Intent(); returnIntent.putExtra("result", "This is the result"); Instrumentation.ActivityResult activityResult = new Instrumentation.ActivityResult(Activity.RESULT_OK, returnIntent); // Create an ActivityMonitor that catch ChildActivity and return mock ActivityResult: Instrumentation.ActivityMonitor activityMonitor = getInstrumentation().addMonitor(ChildActivity.class.getName(), activityResult , true); // Simulate a button click that start ChildActivity for result: final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity); myActivity.runOnUiThread(new Runnable() { @Override public void run() { // click button and open next activity. button.performClick(); } }); // Wait for the ActivityMonitor to be hit, Instrumentation will then return the mock ActivityResult: ChildActivity childActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); // How do I check that StartActivityForResult correctly handles the returned result? assertTrue(myActivity.getActivityResultIsReturned()); assertEqual(myActivity.getActiityResult(), "This is the result"); } ... ... }
Por favor, consulte los sitios a continuación. Le ayudará a resolver su problema. http://saigeethamn.blogspot.in/2009/08/android-developer-tutorial-for_31.html
http://android-er.blogspot.in/2011/08/return-result-to-onactivityresult.html
http://www.mubasheralam.com/tutorials/android/how-start-new-activity-and-getting-results
- ¿Cómo agregar margen entre EditText y Soft Keyboard?
- Múltiples super clases y reutilización de código