unitarias unit test studio run pruebas preguntas juego hacer ejemplo como automatizadas android junit gradle android-studio robolectric

studio - unit test android



Cómo ejecutar pruebas unitarias con Android Studio (5)

Estoy usando el plugin de pruebas de unidad de Android de Jake para gradle: https://github.com/JakeWharton/gradle-android-test-plugin

Mi build.gradle se ve así:

dependencies { // analytics compile(''com.crittercism:crittercism-android:3.0.11'') // retrofit compile(''com.squareup.retrofit:retrofit:1.2.2'') compile(''com.squareup.okhttp:okhttp:1.2.1'') // dagger compile(''com.squareup.dagger:dagger:1.1.0'') compile(''com.squareup.dagger:dagger-compiler:1.1.0'') // compatibility compile(''android.compatibility:android-support:v4-r13'') compile(''com.actionbarsherlock:actionbarsherlock:4.4.0@aar'') // Picasso compile(''com.squareup.picasso:picasso:2.1.1'') // Otto compile(''com.squareup:otto:1.3.4'') // Tests testCompile ''junit:junit:4.10'' testCompile ''org.robolectric:robolectric:2.2'' testCompile ''org.powermock:powermock-api-mockito:1.5.1'' testCompile ''org.easytesting:fest-assert-core:2.0M10'' }

Lamentablemente, no puedo ejecutar todas las pruebas de unidad o unidades específicas de Android Studio. Me sale un error:

Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:171) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113) Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 3 more

Y esto es correcto porque ejecutar la línea de comando no incluye mi dependencia JUnit:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/Android Studio.app/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/Android Studio.app/lib/idea_rt.jar:/Applications/Android Studio.app/plugins/junit/lib/junit-rt.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/android.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/data/res:/Users/eugen/Development/SDK/android-sdk-macosx/tools/support/annotations.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/classes/alpha/debug:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.retrofit/retrofit/1.2.2/jar/cdf7b60568092fbcc7a254371c345e92f733c03c/retrofit-1.2.2.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.google.code.gson/gson/2.2.4/jar/a60a5e993c98c864010053cb901b7eab25306568/gson-2.2.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp/1.2.1/jar/c3562574496bb4d452d6fc45b817577e98d08afe/okhttp-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/javawriter/2.1.1/jar/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger/1.1.0/jar/49f2061c938987c8e56679a731d74fd8448d8742/dagger-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.picasso/picasso/2.1.1/jar/ab19bfb23f641f189b6dca9a4d393f8dc291103a/picasso-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/otto/1.3.4/jar/4d72fb811c7b3c0e7f412112020d4430f044e510/otto-1.3.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger-compiler/1.1.0/jar/ddb38c2be31deeb7a001177f7c358665e350d646/dagger-compiler-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/javax.inject/javax.inject/1/jar/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/res:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/classes.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp-protocols/1.2.1/jar/ec2beaefef3bd4f680c17fad8e72e66f2a006f1/okhttp-protocols-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.crittercism/crittercism-android/3.0.11/jar/e30c21ae491d780622ecaee2752969be98140c3/crittercism-android-3.0.11.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/android.compatibility/android-support/v4-r13/jar/bd6479f5dd592790607e0504e66e0f31c2b4d308/android-support-v4-r13.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 @/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_junit701450667388095664.tmp @w@/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_working_dirs_junit4927192380605663413.tmp -socket63849

Me pregunto si alguien pudo ejecutar pruebas unitarias en Android Studio. Y si es posible, ¿cómo hacerlo?


Me encontré con este problema y encontré una solución: incluya classes.jar del paquete explosionado (.aar) en la carpeta de compilación. Sin embargo, no creo que ayude a encontrar recursos en dependencias .aar.

testCompile fileTree(dir: "$project.buildDir/exploded-bundles", include: "**/classes.jar")

Editar: Desde las herramientas de construcción Gradle de Android 0.9.0, la dependencia ha cambiado a:

androidTestCompile fileTree(dir: "$project.buildDir/exploded-aar", include: "**/classes.jar")

Edición 2: desde las herramientas de construcción de Android Gradle 0.10.0, la dependencia ha cambiado a:

androidTestCompile fileTree(dir: "$project.buildDir/../../build/exploded-aar", include: "**/classes.jar")

Nota: la ruta relativa puede ser diferente dependiendo de la estructura de su proyecto.


Para la posteridad Android Studio 2.0+ admite la ejecución de pruebas de unidades sin complementos.

Se puede acceder a esta pantalla a través del menú Ejecutar> Editar configuraciones ...


Tuve un problema similar con AS 1.2.2.

Seguí los pasos here . Básicamente:

  • Se abrió la ventana de herramientas "Construir variantes" (ver imagen en el enlace) y se cambió el menú desplegable "Prueba de artefacto" a "Pruebas unitarias".
  • Cree un directorio para su código fuente de prueba, es decir, src/test/java , y mueva su prueba al paquete respectivo allí.
  • Asegúrese de que las siguientes secciones de su archivo build.gradle contengan estos:

    dependencies { testCompile ''junit:junit:4.12'' } android { sourceSets { test { resources { srcDir "test" } } } }

Voila! Haga clic derecho en su caso de prueba y seleccione el sabor JUnit.

Por cierto, parece alternar la visibilidad de las pruebas JUnit / Android cuando cambias la herramienta "Construir variantes", así que supongo que puedes probar como JUnit o Android pero no ambas al mismo tiempo.


simplemente agregue la carpeta llamada instrumentTest en / src, debería tener / java adentro así

luego amplíe la clase ActivityTestCase (o cualquier otra unidad de prueba android), como

package com.example.app.test; import android.test.ActivityTestCase; import junit.framework.Assert; public class MainActivityTest extends ActivityTestCase { public void testHappy(){ Assert.assertTrue(true); } }

Haga clic derecho en el directorio verde de java y seleccione ejecutar todas las pruebas y debe obtener esto:

buena suerte


Actualización para AS 1.1+, Android gradle plugin 1.1+

Finalmente es posible sin muchos trucos. Aquí hay un ejemplo de proyecto que muestra cómo configurar la prueba de Robolectric en Android Studio v1.1+ y en el android gradle plugin v1.1+ : https://github.com/nenick/AndroidStudioAndRobolectric

También puede encontrar posibles problemas y soluciones. Sí, Robolectric es complejo y Google no lo admite oficialmente, por lo que todavía tiene algunos problemas. Pero la mayoría de las veces funciona y aporta un gran valor a su proyecto.

También te animo a que comiences a usar Robolectric v3+ . Está casi liberado y es lo suficientemente estable.

Respuesta anterior para AS 0.x y 1.0x y la versión de Android Gradle Plugin debajo 1.1

Logré hacerlo con ayuda de amigos.

Entonces, básicamente, necesitas hacer los siguientes cambios para ejecutar las pruebas de la unidad Robolectric en Android Studio:

  1. Copie su classpath para la prueba (puede encontrarlo como primera línea en el registro "Ejecutar")
  2. Configuración de ejecución abierta para las pruebas de su unidad
  3. Cambia el directorio de trabajo a la carpeta donde está presente AndroidManifest.xml
  4. Agregue la opción VM -classpath "<path_to_project_folder>/build/test-classes:<path_to_gradle_cache>/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar:<your old classpath>"

En cuanto a mí, el comienzo de un nuevo classpath se ve así:

/Users/emartynov/Development/Projects/work/android.project/build/test-classes:/Users/emartynov/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar

Problemas:

  1. Puede ejecutar la prueba solo para la variante de depuración
  2. Cada nueva configuración de ejecución de prueba requiere tales cambios manuales. Pero esto es simplemente copiar / pegar de dos campos de edición

Tengo la versión de Android Studio 0.6. Aquí está otra vez parte de mi archivo build.gradle :

buildscript { repositories { mavenCentral() maven { url ''https://github.com/rockerhieu/mvn-repo/raw/master/'' } } dependencies { classpath ''com.android.tools.build:gradle:0.11.+'' classpath ''com.neenbedankt.gradle.plugins:android-apt:1.3'' // classpath ''org.robolectric.gradle:gradle-android-test-plugin:0.10.1'' classpath ''org.robolectric.gradle:gradle-android-test-plugin:0.10.1-SNAPSHOT'' classpath ''com.jakewharton.sdkmanager:gradle-plugin:0.10.+'' } } apply plugin: ''android-sdk-manager'' apply plugin: ''android'' apply plugin: ''android-apt'' apply plugin: ''android-test'' repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.1.0" packagingOptions { exclude ''META-INF/NOTICE'' exclude ''META-INF/NOTICE.txt'' exclude ''META-INF/notice.txt'' exclude ''META-INF/LICENSE'' exclude ''META-INF/LICENSE.txt'' exclude ''META-INF/license.txt'' exclude ''META-INF/ASL2.0'' exclude ''LICENSE.txt'' } defaultConfig { minSdkVersion 14 targetSdkVersion 19 versionCode 1 versionName "0.9.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { androidTest.setRoot( ''src/test'' ) } } dependencies { // butter knife compile ''com.jakewharton:butterknife:5.0.0'' // dagger compile ''com.squareup.dagger:dagger:1.2.1'' // apt apt ''com.squareup.dagger:dagger-compiler:1.+'' // AS tests androidTestCompile ''junit:junit:4.+'' androidTestCompile( ''org.robolectric:robolectric:2.3'' ) { exclude group: ''commons-logging'' exclude group: ''org.apache.httpcomponents'' } androidTestCompile ''com.squareup:fest-android:1.+'' androidTestCompile ''org.mockito:mockito-all:1.9.+'' androidTestCompile ''org.easytesting:fest-assert-core:2.0M10'' androidTestCompile( ''org.skyscreamer:jsonassert:1.2.+'' ) { exclude group: ''org.json'' } // tests testCompile ''junit:junit:4.+'' testCompile( ''org.robolectric:robolectric:2.3'' ) { exclude group: ''commons-logging'' exclude group: ''org.apache.httpcomponents'' } testCompile ''com.squareup:fest-android:1.+'' testCompile ''org.mockito:mockito-all:1.9.+'' testCompile ''org.easytesting:fest-assert-core:2.0M10'' testCompile ''com.squareup.dagger:dagger-compiler:1.+'' testCompile( ''org.skyscreamer:jsonassert:1.2.+'' ) { exclude group: ''org.json'' } }