tutorial test studio activity android unit-testing frameworks tdd mocking

android - test - robolectric gradle



Android Drive Driven Development (6)

Para pruebas fuera del dispositivo, mira Robolectric

Para las pruebas en el dispositivo, mira a Borachio

En pocas palabras: todavía es muy, muy difícil de hacer bien. Las cosas están mejorando (la situación es dramáticamente mejor hoy que hace 6 meses), pero Android es cómodamente el entorno más hostil a las pruebas para el que he escrito programas.

Tengo una experiencia considerable en hacer aplicaciones de Android. Para mi nuevo proyecto, hemos decidido realizar Test Driven Development (TDD). Me he mojado las manos en Robotium para User Scenario Testing, y funciona bien y parece fácil también.

Para las pruebas unitarias, traté de burlar Context usando (MockContext Android Class) pero no puedo hacerlo. Revisé este blog http://sites.google.com/site/androiddevtesting/ y en este http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html , que sugiere esa burla en las aplicaciones de Android todavía es muy limitada y difícil, y han sugerido usar PowerMock, jMockit, JeasyTest o Roboelectric (en combinación con Mockito y Maven) e incluso RoboGuice.

Me gustaría recibir alguna sugerencia de ustedes sobre qué marco de pruebas de unidades, en su opinión, es el mejor para probar aplicaciones de Android. (particularmente probando clases de Android, posiblemente dando contextos falsos y otras características de burla para que pueda hacer que mis casos de prueba sean lo más independientes posible). Cualquier sugerencia o sugerencia sería útil. Gracias


  • Uso ActivityInstrumentationTestCase2 en el caso de Actividades para TDD (o BDD en lugar de eso), y escribo pruebas de unidades normales para toda la lógica. Esto también me ayuda a separar la lógica de las actividades.
  • Las aplicaciones móviles por naturaleza están centradas en la interfaz de usuario. Por lo tanto, no tiene sentido simular la interfaz de usuario, incluso si hace que la prueba de la unidad se vea como una prueba funcional.
  • Para agregar Extras a los intentos, puede establecer un intento personalizado para la prueba o hacerlo para todas las pruebas anulando la configuración.
  • Los simulacros generan muchos problemas en Android, así que utilizo apéndices.

Un ejemplo se da a continuación. La actividad muestra Hello World al hacer clic en un botón -

public class HelloWorldActivityTest extends ActivityInstrumentationTestCase2<HelloWorldActivity> { private HelloWorld activity; public HelloWorldActivityTest() { super(HelloWorldActivityTest.class); } public void testShouldRenderGreetingOnButtonClick() { activity = this.getActivity(); Button button = (Button) activity.findViewById(R.id.btn_greet); TouchUtils.clickView(this, button); assertEquals("Hello World!", ((TextView) activity.findViewById(android.R.id.greeting_text)) .getText()); } }

EDITAR: Las cosas han cambiado desde que publiqué la respuesta. Mockito ahora tiene un soporte razonablemente bueno para Android. Y para las pruebas, pasamos de ActivityInstrumentationTestCase2 a Robolectric, solo para aprovechar la velocidad de JVM en la fase de desarrollo. Android Testing Framework es ideal para la integración y las pruebas funcionales, pero no para las pruebas unitarias.


Para hacer TDD en Android, personalmente uso todo lo siguiente:

  • assertj-android : aserciones para Android
  • Mockito : Marco burlón
  • Robolectric : marco de pruebas unitarias que se ejecuta sin la necesidad de un emulador de Android
  • Robotium : pruebas de interfaz de usuario (Necesita emulador o dispositivo para ejecutar)

Además: el uso de bibliotecas de inyección de dependencias como Dagger o Roboguice simplificará en gran medida las pruebas de unidad / integración. Para ejecutar pruebas en múltiples dispositivos, considere usar Spoon .


Para aplicar TDD para Android, Android Testing Codelab te será de gran ayuda. Code lab muestra el uso de la herramienta de prueba y cómo puede aplicar TDD para Android. Lo probé y fue muy útil para mí.

Bonificación: verificar la arquitectura limpia


tenemos

https://developer.android.com/training/testing/start/index.html

y capaz de probar pruebas locales (Ejecuciones en JVM) e instrumentales (Ejecuciones en dispositivo o emulador)

Para esto tenemos que agregar

Android Testing Support Library

El SDK de Android incluye dos herramientas para pruebas de aplicaciones de nivel funcional

Mono y monjeyrunner


Android Testing Support Library proporciona un amplio marco para probar aplicaciones de Android. Esta biblioteca proporciona un conjunto de API que le permiten crear rápidamente y ejecutar código de prueba para sus aplicaciones, incluidas JUnit 4 y pruebas de interfaz de usuario funcional (UI). Puede ejecutar pruebas creadas con estas API desde el IDE de Android Studio o desde la línea de comandos.

Leer más sobre:

Gracias :)