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.

  • Apkbuilder encuentra el archivo duplicado al agregar powermock a un proyecto de prueba de android
  • Cómo llamar a Button.performClick en Android JUnit test case?
  • Obtención de contexto en AndroidTestCase o InstrumentationTestCase en la función Prueba de unidad de Android Studio
  • Android Test Case - ¿cómo ver la salida?
  • Unidad de prueba de funciones privadas en Android
  • Unidad de prueba Java clase que carga la biblioteca nativa
  • Cómo probar una actividad usando google-api-client
  • Cómo leer un archivo solo de prueba en la prueba de unidad de Android
  • Prueba de unidad de Android con Retrofit y Mockito
  • ¿Es una prueba UNIT o una prueba de integración?
  • ¿Cuál es la mejor y más fácil herramienta para probar aplicaciones de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.