ActivityInstrumentationTestCase2 vs ActivityTestRule

Necesito probar una sola actividad en mi aplicación de Android. La documentación de ActivityInstrumentationTestCase2 dice:

Esta clase proporciona pruebas funcionales de una sola actividad.

Y la documentación de ActivityTestRule dice:

Esta regla proporciona pruebas funcionales de una sola actividad.

Casi las mismas palabras. Además de las dos muestras que he codificado, haz lo mismo. Entonces, ¿debería preferir ActivityTestRule sobre ActivityInstrumentationTestCase2 o viceversa?

Lo que veo es que la extensión de ActivityInstrumentationTestCase2 parece a una prueba de estilo JUnit3 (su ancestro es junit.framework.TestCase y los métodos de prueba deben comenzar con la test palabras).

Uso de ActivityTestRule

 package sample.com.sample_project_2; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.LargeTest; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.typeText; import static android.support.test.espresso.matcher.ViewMatchers.withId; @RunWith(AndroidJUnit4.class) @LargeTest public class ApplicationTest { @Rule public ActivityTestRule<SecAct> mActivityRule = new ActivityTestRule(SecAct.class); @Test public void foo() { onView(withId(R.id.editTextUserInput)).perform(typeText("SAMPLE")); } } 

Extendiendo ActivityInstrumentationTestCase2

 package sample.com.sample_project_2; import android.test.ActivityInstrumentationTestCase2; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.typeText; import static android.support.test.espresso.matcher.ViewMatchers.withId; public class ApplicationTest2 extends ActivityInstrumentationTestCase2<SecAct> { public ApplicationTest2() { super(SecAct.class); } @Override protected void setUp() throws Exception { super.setUp(); getActivity(); } public void testFoo2() { onView(withId(R.id.editTextUserInput)).perform(typeText("SAMPLE 2")); } } 

Para su ejemplo, no hay diferencia. Puede usar cualquiera de ellos.

Según el principio OO, "Preferiremos composición sobre herencia". Uso de ActivityTestRule<> es a través de la composición, mientras que ActivityInstrumentationTestCase2<> es a pesar de la herencia.

A veces, prefiero tener una clase base común para mis clases de prueba para reutilizar las inicializaciones comunes. Esto me ayuda a agrupar las pruebas de acuerdo a un tema. ActivityTestRule<> me permite hacer esas cosas.

Por estas razones, prefiero ActivityTestRule<> . De lo contrario, no he visto ninguna diferencia.

  • Unidad de prueba de funciones privadas en Android
  • Valor de Stub de Build.VERSION.SDK_INT en la prueba de unidad local
  • Cómo probar una actividad usando google-api-client
  • Autogenerar stubs de prueba de unidad en Android studio
  • Prueba de unidad de Android Studio: leer datos (entrada)
  • Cómo generar informes de pruebas de Android en HTML automáticamente
  • ¿Cómo puedo crear pruebas en Android Studio?
  • Android Espresso testing 'No se puede resolver el símbolo' InstrumentationRegistry ''
  • Cómo configurar gradle-2.2.1-all.zip manualmente
  • Ninguna prueba encontrada para dado incluye error, al ejecutar la prueba de unidad parametrizada en Android Studio
  • Prueba de la unidad de Android con AsyncTask y la solución de actualizaciones de interfaz de usuario
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.