Pruebas unitarias con Android Studio y Gradle?

¿Cómo puedo añadir fácilmente pruebas de unidad a mis proyectos de Android en Android Studio (IntelliJ)?

Para ser más exactos: Quiero agregar una carpeta con código de prueba (JUnit 4) y ejecutar las pruebas de unidad desde allí usando el JDK instalado regularmente (no en un emulador de Android). Hasta ahora he añadido las carpetas 'test / java /' a mi módulo y añadido 'prueba' como un conjunto de código fuente y junit como una dependencia de prueba:

sourceSets { instrumentTest.setRoot('src/test') } dependencies { instrumentTestCompile 'junit:junit:4.+' // ... } 

Cuando ahora seleccione Ejecutar 'Todas las pruebas' en la carpeta de prueba / java me da una excepción UnsupportedOperationException.

¿Qué me estoy perdiendo? ¿Cómo se ejecutan las pruebas de unidad para los proyectos de Android?

Puntos de bonificación para una recomendación de un plugin que funciona como 'Infinitest' en Eclipse – donde simplemente puedo guardar una clase y su prueba de unidad se ejecuta automáticamente. Todos los derechos reservados

PS: No quiero usar https://github.com/JakeWharton/gradle-android-test-plugin, ya que el complemento parece estar ya desaprobado.

Creo que la respuesta debería ser ya en Android Studio 1.1 (y actual gradle plugin). Presentaron el soporte de prueba de unidad. Todavía es experimental, pero menos que nuestros esfuerzos anteriores aquí 🙂 Vea aquí .

He pasado las últimas semanas (también) en eso. En realidad, en eso en los esteroides, ya que también tuve que poner Robolectric en la olla.

Respuesta corta: a menos que confunda ese error con otra cosa, creo que está intentando ejecutar pruebas de unidad con el testrunner de Android.

Respuesta larga: terminé con el complemento obsoleto (después de probarlo, y luego tratando de poner las pruebas en la carpeta androidTest), ya que resolvió bastante algunos problemas en Jenkins para mí. La desventaja es que no reconoce la carpeta misma como código java o android, por lo que la terminación de código funciona con todo, excepto el contenido de la carpeta (por ejemplo, ve correctamente el proyecto base y todas las dependencias).

Lo que tenía que hacer para ejecutarlo en Android Studio era crear un testrunner JUnit (no Android). No funcionará fuera de la caja probablemente, porque la orden del classpath está desordenada (aunque funciona muy bien ejecutando simplemente las pruebas en gradle).

Básicamente los pasos manuales que tuve que hacer son:

  1. Ejecute junit testrunner para ver la línea de comandos utilizada por AS
  2. Edite el argumento -classpath haciendo lo siguiente:

    • Mover junit> 3.8 en la parte superior de la cadena (supongo que porque de lo contrario obtendrá el de android, que es demasiado viejo)
    • Mover robolectric como segundo si lo referencia, de lo contrario se verán métodos androides reales antes de los robolectric
    • Agregue la ruta de salida de las clases de prueba al final, por lo que encontrará sus pruebas (recuerde terminar las clases de prueba con 'Test' de lo contrario no se encontrarán)
  3. Añada el -classpath que acaba de crear a las opciones VM de runner después de -ea (he encontrado esta solución, o partes de ella, en muchos lugares, una muy buena es: http://kostyay.name/android-studio-robolectric- Gradle-getting-work / y se aplica también a pruebas unitarias sencillas).

Una alternativa que no he intentado pero he considerado ha sido sugerida esta mañana (ver último post): https://groups.google.com/forum/#!topic/adt-dev/Y8-ppkWell0

Tengo un montón de conocimientos dispersos en este momento debido a los muchos problemas que he descubierto debido a la previsualización de SW y las toneladas de información que tenía que pasar a través de resolverlos, pero si tiene más tema específico sobre el tema, sólo házmelo saber: )

  • ¿Cómo ejecutar pruebas de unidad para Android no está en el dispositivo o emulador?
  • Prueba de unidad MVP usando mockito con los oyentes de eventos
  • Pruebas de instrumentación Android con Mockito
  • JUnit prueba para la aplicación de Android con fragmentos
  • Cómo burlar getApplicationContext
  • Mono Android. Marco de pruebas unitarias
  • ¿Cómo puedo ejecutar una única prueba de Android con Kotlin?
  • Instrumentation.ActivityMonitor no monitoreando Intent.ACTION_CALL
  • Prueba JUnit con Robolectric: java.lang.InstantiationException
  • Junit / Mockito - esperar la ejecución del método
  • Proyecto de biblioteca de prueba autónoma no puede encontrar las clases de biblioteca
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.