unitarias unit test studio pruebas programacion móviles ejemplo desarrollo curso aplicaciones android unit-testing android-fragments android-testing

unit - Android: escribir casos de prueba para fragmentos



test android studio (4)

Aquí está mi solución de trabajo:

  1. Cree una clase de prueba de unidad de instrumentación para esto en el directorio androidTest, es decir:

    public class FragmentTest extends ActivityInstrumentationTestCase2<MainActivity> { private MainActivity testingActivity; private TestFragment testFragment; //... }

  2. llama a este constructor dentro de esta nueva clase:

    public FragmentTest() { super(MainActivity.class); }

  3. anula el método setUp () (asegúrate de tener R.id.fragmentContainer en tu clase Activity) donde llamarás al final waitForIdleSync () :

    @Override protected void setUp() throws Exception { super.setUp(); // Starts the activity under test using // the default Intent with: // action = {@link Intent#ACTION_MAIN} // flags = {@link Intent#FLAG_ACTIVITY_NEW_TASK} // All other fields are null or empty. testingActivity = getActivity(); testFragment = new TestFragment(); testingActivity.getFragmentManager().beginTransaction().add(R.id.fragmentContainer,testFragment,null).commit(); /** * Synchronously wait for the application to be idle. Can not be called * from the main application thread -- use {@link #start} to execute * instrumentation in its own thread. * * Without waitForIdleSync(); our test would have nulls in fragment references. */ getInstrumentation().waitForIdleSync(); }

  4. Escriba un método de prueba, por ejemplo algo como:

    public void testGameFragmentsTextViews() { String empty = ""; TextView textView = (TextView)testFragment.getView().findViewById(R.id.myTextView); assertTrue("Empty stuff",(textView.getText().equals(empty))); }

  5. Ejecute la prueba.

En mis proyectos anteriores, he realizado la mayor parte del trabajo a través de Actividades y he usado ActivityInstrumentationTestCase2 según el documento:
http://developer.android.com/tools/testing/activity_testing.html
Tengo una idea de cómo trabajar con casos de prueba de actividad; pero cuando se trata de Fragment, no tengo mucha idea ni encontré muchos documentos relacionados con eso. Entonces, ¿cómo escribir casos de prueba cuando tengo varios fragmentos con una o dos actividades? Cualquier ejemplo de código o muestra sería más útil.



Use su actividad principal como la actividad de prueba que envía a ActivityInstrumentationTestCase2. Luego puede trabajar con los fragmentos a través del administrador de fragmentos de su actividad principal que lanza los fragmentos. Esto es incluso mejor que tener una actividad de prueba porque usa la lógica que usted escribe en su actividad principal para probar los escenarios, lo que brinda una prueba más completa y completa.

Ejemplo:

public class YourFragmentTest extends ActivityInstrumentationTestCase2<MainActivity> { public YourFragmentTest(){ super(MainActivity.class); } }


Aquí hay una guía aproximada usando ActivityInstrumentationTestCase2 :

Paso 1 Crea una actividad en blanco para guardar tu (s) fragmento (s)

private static class FragmentUtilActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout view = new LinearLayout(this); view.setId(1); setContentView(view); } }

Paso 2 : dentro de tu prueba, instancia tu fragmento y agrégalo a la actividad en blanco

public class MyFragmentTest extends ActivityInstrumentationTestCase2<FragmentUtilActivity> { private MyFragment fragment; @Before public void setup() { fragment = new MyFragment(); getActivity().getFragmentManager().beginTransaction().add(1, fragment, null).commit(); } }

Paso 3 Prueba tu fragmento instanciado

@Test public void aTest() { fragment.getView().findViewById(...); }

Si está utilizando robolectric, esto es bastante sencillo usando la clase FragmentUtilTest :

@Test public void aTest() { // instantiate your fragment MyFragment fragment = new MyFragment(); // Add it to a blank activity FragmentTestUtil.startVisibleFragment(fragment); // ... call getView().findViewById() on your fragment }