test support android unit-testing junit continuous-integration robolectric

support - test android



Automatización de casos de prueba de unidades Android: biblioteca Robolectric vs Android Testing framework (2)

Preguntándose cuál es la mejor opción para escribir casos de prueba unitaria para aplicaciones y bibliotecas de Android: utilizando la biblioteca Robolectric o apegándose al marco de prueba de Android. Quiero ejecutar el conjunto de pruebas en la línea de comandos y quiero que sea independiente de la necesidad de configurar el emulador o de dejar un dispositivo conectado con la máquina de compilación. ¿Alguno de ustedes realiza un análisis comparativo de estos o algo mejor? Tus experiencias serán geniales, ayúdame a decidir la mejor solución.


Trabajé en ambos, lo que encontré es:

1) Robolectric no es compatible con API 19, se menciona en su documento - http://robolectric.org/eclipse-quick-start/ . Es una gran desventaja de eso.

2) Ejecución de Robolectric en JVM no en DVM. Por lo tanto, no podemos detectar que en ese momento en particular, el GPS está habilitado en el dispositivo o no, etc. Solo podemos aprobar nuestro valor predeterminado.

3) La escritura de código en Robolectric es compleja que junit, especialmente para fragmentos, hay mucha complejidad y problemas.

4) Robolectric necesita un jar y una configuración externos y para la prueba junit no necesitamos ninguna biblioteca externa.

5) Robolectric es más rápido porque se ejecuta en JVM pero esto también tiene una desventaja, no podemos ver la IU en nuestro dispositivo, qué código de pantalla se está ejecutando.

Para Android, me gusta la prueba jUnit.


Utilizo un sistema escalonado, donde prefiero los niveles anteriores cuando sea posible:

  1. Pruebas de unidad pura Intento hacer la mayor cantidad posible de código con total independencia de las API de Android, y luego utilizar pruebas unitarias "puras" que pueden ejecutarse en cualquier JVM. Estas pruebas son las más rápidas y ayudan a mantener el código que no tiene que ser portátil para Android.
  2. Pruebas unitarias basadas en Robolectric. Donde mi código tiene solo pequeñas dependencias en las API de Android, eso puede ser satisfecho por las sombras de Robolectric, lo pruebo con Robolectric. Hay un poco más de tiempo de configuración para Robolectric en comparación con las pruebas puras, pero aún es más rápido que iniciar / ejecutar en un emulador.
  3. Pruebas de Android framework. Donde Robolectric no lo corta, ya sea porque las sombras no existen o porque estoy usando fuertemente las API de Android (y, por lo tanto, quiero probar contra el Real Thing), escribo la prueba que se ejecuta en el emulador / dispositivo con el marco predeterminado.

El objetivo de los niveles es mantener las cosas lo más simples posible, lo que mantiene el conjunto completo más rápido y ayuda a promover un código más limpio.