siria rusa militar intervención hoy guerra explicacion empezó cómo conflicto comenzo combatientes civil batalla alepo android android-activity android-espresso

android - rusa - guerra en siria hoy



¿Espresso cómo probar si la actividad está terminada? (4)

Quiero afirmar que mi actividad que actualmente estoy probando está terminada cuando se realizan ciertas acciones. Lamentablemente, hasta ahora solo he de afirmarlo agregando un poco de sueño al final de la prueba. ¿Hay alguna manera mejor?

import android.content.Context; import android.os.Build; import android.support.test.rule.ActivityTestRule; import android.test.suitebuilder.annotation.LargeTest; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.junit.Assert.assertTrue; @SuppressWarnings("unchecked") @RunWith(JUnit4.class) @LargeTest public class MyActivityTest { Context context; @Rule public ActivityTestRule<MyActivity> activityRule = new ActivityTestRule(MyActivity.class, true, false); @Before public void setup() { super.setup(); // ... } @Test public void finishAfterSomethingIsPerformed() throws Exception { activityRule.launchActivity(MyActivity.createIntent(context)); doSomeTesting(); activityRule.getActivity().runOnUiThread(new Runnable() { @Override public void run() { fireEventThatResultsInTheActivityToFinishItself(); } }); Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); } } }


En mi caso puedo probar para isFinishing() :

assertTrue(activityTestRule.getActivity().isFinishing());

en lugar de:

Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); }

Otra ventaja de isFinishing() es que no necesita la comprobación de versión.


No estoy seguro si es una buena práctica pero esto funcionó para mí:

assertTrue(mTestRule.getActivity() == null);


Puede utilizar el ejemplo de StartActivityForResult a continuación, más descripciones en los enlaces.

Cómo iniciar la actividad desde FirstActivity:

Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1);

Así es como terminas tu SecondActivity para volver al primero (sin enviar el resultado):

Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish();

Cómo generar un evento cuando se termina SecondActivity (se escribe en FirstActivity):

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { } }//onActivityResult

Puede encontrar más información aquí: http://developer.android.com/training/basics/intents/result.html y allí ¿Cómo administrar `startActivityForResult` en Android? También existe la forma de enviar los datos que desea obtener de SecondActivity.


Tal vez un poco tarde pero esto también es posible:

assertThat(activityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED));