it-swarm.dev

¿Diferencia entre la prueba de instrumentación de Android y la prueba de unidad en Android Studio?

A partir de Android Studio 1.1rc hay Soporte de pruebas de unidad y me pregunto cuál es la diferencia entre las pruebas de instrumentación de Android y las pruebas de unidad.

Como lo entiendo:
Pruebas unitarias son útiles para probar código que no llama la API de Android, y pruebas de instrumentación de Android son pruebas de integración para probar elementos específicos de la API de Android o GUI componentes.

Sin embargo, si utiliza un marco como Robolectric o Mockito en sus pruebas de unidad, puede probar el código de Android (sin la necesidad de un dispositivo) si no me equivoco.


¿Es correcto, o hay una diferencia más grande? Si es así, ¿para qué sirve cada uno?

61
Joen93

Pruebas de unidad aislar el componente bajo prueba, y esta es la razón por la que a menudo se usan junto con marcos de simulacros como Mockito: porque aíslan la unidad de sus dependencias. Tenga en cuenta que lo que dice con respecto a la API de Android es parcialmente cierto, porque también hay Pruebas de unidades instrumentadas , a saber La instrumentación también forma parte del paquete Junit , y también las clases que extienden TestCase como la clase AndroidTestCase es parte del paquete Junit pero permite el uso de A) Context, que puede llamar con getContext (), y B) ¡Recursos que son parte de la API de Android! También considere que AndroidTestCase es una clase base y hay otras clases bastante útiles que amplían esta clase. Ellos prueban específicamente los cargadores, proveedores de contenido e incluso servicios, y también tienen acceso a la API de Android. por lo que estas clases proporcionan el marco de prueba de JUnit así como métodos específicos de Android. Ahora, con Junit4, está ServiceTestRule que se extiende directamente desde Object y le permite probar un Servicio más fácilmente, aunque no puede iniciar una Intención directamente dentro de esta clase.

Pruebas de Instrumentación también están en el paquete Junit, pero el control de la API de Android es bastante total porque las Pruebas de Instrumentación se crean instancias en el sistema antes de ejecutar cualquier código de aplicación, y para probar es necesario abrir el verdadero Aplicación (emulador o teléfono conectado con USB). Acceden a los componentes de Android (por ejemplo, al hacer clic en un botón) y al ciclo de vida de la aplicación, usualmente son más lentos que las pruebas de Junit que extienden TestCase (los que se examinaron anteriormente).

EDITAR: En lo que respecta a Roboelectric y Mockito, que se encuentran junto con Espresso entre los marcos de prueba más populares en este momento (13 de julio de 2016), Roboelectric le permite realizar múltiples pruebas en segundos en lugar de minutos, y esto es muy útil en los equipos que tienen que Ejecutar pruebas continuas, y están sujetas a la integración continua.

Desde el sitio de Robolectric:

Un enfoque alternativo de Robolectric es usar marcos simulados como Mockito o burlarse del SDK de Android. Si bien este es un enfoque válido, a menudo produce pruebas que son esencialmente implementaciones inversas del código de la aplicación. Roboelectric permite un estilo de prueba que está más cerca de las pruebas de caja negra, lo que hace que las pruebas sean más efectivas para refactorizar y permite que las pruebas se centren en el comportamiento de la aplicación en lugar de la implementación de Android. Todavía puede usar un marco de burla junto con Robolectric si lo desea.

Mockito que también se puede usar con Junit, se usa realmente con la excepción de cuándo hay que administrar clases finales, clases anónimas o tipos primitivos.

29
trocchietto

Me parece que las pruebas de instrumentación son pruebas de integración con la capacidad de controlar el ciclo de vida y los eventos (onStart, onCreate, etc.) de la aplicación.

Las pruebas de unidad, como yo lo entiendo, están probando una Unidad (por ejemplo, Clase) para sus datos y comportamiento.

Por ejemplo, digamos que tienes un juego: este juego se ejecuta en una actividad (actividad principal) y tienes un personaje basado en una clase de Robot, que tiene 2 métodos (disparar y mover). Debería probar la actividad principal con una prueba de instrumentación para ver si se guarda correctamente cuando abandona la aplicación, si se restaura correctamente cuando la restaura, etc. y probaría el robot con una prueba de unidad para probar sus atributos y comportamiento.

Descargo de responsabilidad: No soy una persona de Java, pero me interesé en su pregunta y la respondí con una búsqueda menor en línea. Probablemente tengas que profundizar en esto para encontrar una respuesta más detallada.

40
gemantzu

PRUEBA DE LA UNIDAD

Pruebas unitarias que se ejecutan en su máquina local solamente. Estas pruebas se compilan para ejecutarse localmente en la JVM para minimizar el tiempo de ejecución. Utilice este enfoque para ejecutar pruebas unitarias que no tienen dependencias en el marco de Android o tienen dependencias que los objetos simulados pueden satisfacer.

Básicamente, ejecuta código Java simple para probar, por ejemplo, un proveedor de contenido, conexiones de base de datos, entrada y salida de métodos. Esto no se ejecuta en Android. Para ejecutarlo NO necesitas un dispositivo.

PRUEBAS DE INSTRUMENTACIÓN

Pruebas unitarias que se ejecutan en un dispositivo Android o emulador. Estas pruebas tienen acceso a la información de Instrumentación, como el contexto de la aplicación bajo prueba. Utilice este enfoque para ejecutar pruebas unitarias que tienen dependencias de Android que los objetos simulados no pueden satisfacer fácilmente.

Así que se burla de cómo el usuario usará la aplicación real, por lo tanto, NECESITA un dispositivo (físico o emulador) para ejecutarlo. Tiene acceso a vistas, actividades, contexto, etc.

Referencia: http://developer.Android.com/tools/testing/testing_Android.html

24
Isaac Urbina

enter image description here

Pruebas unitarias

Estas son pruebas pequeñas y altamente enfocadas que pueden ejecutarse directamente en su máquina de desarrollo local y, al ejecutarse directamente en su entorno local, son muy rápidas y su tiempo de ejecución es muy inferior.

Pruebas de integración

Estas son las pruebas que realmente se ejecutarán en un dispositivo real y no en una máquina local y están destinadas a probar la integración entre diferentes módulos que trabajan juntos.

Pruebas de extremo a extremo

Pero la fidelidad de estas pruebas es mucho mayor, ya que estas pruebas también se ejecutan en un dispositivo real y el alcance de estas pruebas es mucho mayor, ya que están probando una característica completa o un flujo completamente de extremo a extremo.

Examen de la unidad:

  • JUIT
  • Mockito
  • PowerMock

Pruebas de interfaz de usuario:

  • Café exprés
  • UIAutomator
  • Robotium, Appium, Calabash, Robolectric

Leer más aquí y aquí

3
yoAlex5

https://developer.Android.com/training/testing/fundamentals.html#testing-pyramid

Las pruebas pequeñas son pruebas unitarias que puede ejecutar en forma aislada de los sistemas de producción. Por lo general, se burlan de todos los componentes principales y deberían ejecutarse rápidamente en su máquina.

Las pruebas medias son pruebas de integración que se ubican entre pruebas pequeñas y pruebas grandes. Integran varios componentes, y se ejecutan en emuladores o dispositivos reales.

Las pruebas grandes son las pruebas de integración y UI que se ejecutan al completar un flujo de trabajo de UI. Se aseguran de que las tareas clave del usuario final funcionen como se espera en emuladores o dispositivos reales.

0
ViT-Vetal-

Examen de la unidad

Se ejecuta en la máquina local solamente.

Caso de prueba de instrumentación

Se ejecuta en el dispositivo o emulador de Android. Si verifica el caso de prueba, se ejecuta en el emulador o dispositivo Android

0
mathi