¿Qué probar con Robolectric?

Me parece que estoy malentendiendo fundamentalmente el propósito de Robolectric. He estado luchando con él durante una semana ya, y hasta ahora recibiendo un nuevo mensaje de error se considera como haciendo progreso. Soy capaz de probar algunas cosas básicas como las vistas estáticas en una actividad, pero cuando algo más complicado entran en juego las cosas se desmoronan. Tuve que extender Robolectric para soportar bibliotecas de terceros con ciertos parámetros, barras de acción de Appcompat y muchas otras cosas que consumían mucho tiempo y que en realidad no estaba documentada en ninguna parte, y las cosas avanzan a un ritmo bastante glacial. Estoy empezando a pensar que lo estoy utilizando de una manera incorrecta y simplemente no se supone que haga lo que quiero que haga.

La lógica general de la aplicación es bastante sencilla, por lo que no hay mucho para la prueba de unidad, lo más complicado es la interfaz de usuario y las llamadas de la API remota. ¿Se supone que Robolectric hace que las pruebas de unidad para Android sean menos dolorosas que con JUnit porque puede ejecutarse en la JVM y admite algunas clases de Android? Tal vez un marco de prueba de conducta de cuadro negro como Espresso sería más adecuado para mis necesidades? Pero utilizamos la integración continua, y Robolectric era agradable y fácil de configurar para ejecutar pruebas en el servidor CI, y me gustaría mantenerlo así.

¿Para qué utiliza Robolectric? Muchas publicaciones del blog lo recomiendan para "pruebas de ciclo de vida de la actividad", pero como también soy bastante nuevo en el mundo de Android, no entiendo realmente el propósito de ello, sobre todo porque la aplicación que estoy probando es sólo de retrato . ¿Podría alguien dar una visión general de lo que utiliza Robolectric para, y cómo hacerlo, preferiblemente con ejemplos de código y explicar por qué y cómo esas pruebas son importantes?

Lo usamos para:

  • Prueba unitaria: todos los componentes de los analizadores y utils, a los controladores y presentadores
  • Pruebas de integración / aceptación: la lógica de negocio de la aplicación, por pantalla (que cae en la integración y / o pruebas de aceptación)

No lo usamos para (y lo hemos encontrado difícil de usar para estos):

  • Probando la capa de red (ejecutamos todas las pruebas mediante la inyección de los datos de prueba de la misma manera que la capa de red, los analizadores se prueban por separado)
  • Flujos de usuario a través de diferentes pantallas

Si está buscando más de este último, quizás Espresso / Robotium son más adecuados para sus necesidades. Y usted absolutamente puede ejecutar estos como parte de su oleoducto CI, pero tendrá que invertir algún tiempo en la configuración, o la integración con algo como Appurify.

Si le resulta muy difícil escribir sus pruebas, podría tener que hacer más con la forma en que su aplicación está diseñada que con la forma en que está usando robolectric. Vea mi respuesta aquí también, podría ayudarle: Escribir pruebas de aceptación de Android con robolectric: ¿cómo podría hacerse?

  • ¿Cómo ejecutar una prueba JUnit4 simple en Android Studio 1.1?
  • ¿Qué hace testAndroidTestCaseSetUpProperly hacer
  • Diferencia entre el método runOnUiThread () y la anotación @UiThreadTest
  • VerifyError con PowerMock en Android
  • Prueba de la unidad Android - Problemas de resolución y verificación
  • La prueba de Android JUnit de Simpe se cuelga en Eclipse
  • ¿Cómo puedo probar el código de Android que tenga View Animators?
  • Android Marshmallow Permisos de Pruebas
  • Android - AssertionFailedError en el método startActivity en la clase de prueba de ActivityUnitTestCase
  • Cómo obtener la salida de registro de Android mostrada con las pruebas de JUnit (utilizando JUnit nativo sin emulador)
  • Error en el corredor al realizar pruebas con Robolectric
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.