¿Por qué el corredor de pruebas de Android informa de "Empty test suite"?

Estoy golpeando mi cabeza contra la pared aquí tratando de averiguar por qué IntelliJ / Android está informando "Empty test suite". Tengo un pequeño proyecto con dos módulos IntelliJ ("Proyectos" en Eclipse). El módulo de prueba de unidad tiene su propio AndroidManifest.xml, que he pegado en la parte inferior. Estoy intentando funcionar con un ActivityUnitTestCase , puesto que las pruebas dependerán del Context -objeto.

El nombre del paquete del módulo principal es nilzor.myapp . El nombre pacakge del módulo de prueba es nilzor.myapp.tests

¿Por qué el test testBlah() no está detectando el testBlah() -method como una prueba?

 <?xml version="1.0" encoding="utf-8"?> <!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nilzor.myapp.tests" android:versionCode="1" android:versionName="1.0"> <!-- We add an application tag here just so that we can indicate that this package needs to link against the android.test library, which is needed when building test cases. --> <application> <uses-library android:name="android.test.runner"/> </application> <!-- This declares that this application uses the instrumentation test runner targeting the package of nilzor.myapp. To run the tests use the command: "adb shell am instrument -w nilzor.myapp.tests/android.test.InstrumentationTestRunner" --> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="nilzor.myapp" android:label="Tests for nilzor.myapp"/> </manifest> 

Y aquí está mi clase de prueba :;

 package nilzor.myapp.tests; public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{ public NilzorSomeTest(Class<T> activityClass){ super(activityClass); } @SmallTest public void testBlah(){ assertEquals(1,1); } } 

He leído los fundamentos de prueba , el documento de prueba de actividad , y he intentado seguir este blog de prueba de Hello World , aunque sea para Eclipse. No puedo conseguir que el corredor de pruebas encuentre y ejecute mi prueba. ¿Qué estoy haciendo mal?

Algunas de las preguntas que todavía me siento inseguro son:

  1. ¿Necesito una anotación por encima del método de prueba de la Unidad?
  2. ¿Necesito prefijar el método con "test", o es solo para pruebas de JUnit?
  3. ¿Puedo tener pruebas en sub-paquetes de nilzor.myapp.tests ?

Pero la pregunta principal de este post es ¿por qué no prueba el corredor detectar mi prueba ?

Acabo de empezar a aprender sobre las pruebas de las aplicaciones de Android y he estado luchando con el mismo problema. Debe proporcionar un constructor predeterminado para su clase de prueba, por ejemplo:

 package nilzor.myapp.tests; public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{ public NilzorSomeTest(){ super(ActivityYouWantToTest.class); } @SmallTest public void testBlah(){ assertEquals(1,1); } } 

Sobre sus otras preguntas:

  1. No. Mis pruebas todavía se ejecutan sin anotaciones, pero supongo que es una buena práctica tenerlas. Permite especificar el tamaño de las pruebas a ejecutar. Consulte ¿Cuál es el propósito de las anotaciones de @SmallTest, @MediumTest y @LargeTest en Android? Para más detalles.

  2. Sí, necesitas un prefijo "prueba". InteliJ da la advertencia "método nunca utilizado" cuando no hay un prefijo "prueba", y omite ese método durante la ejecución de la prueba.

  3. Sí. Tengo mis pruebas organizadas en subpaquetes y parece estar funcionando bien.

Si esto está sucediendo "de repente" o "funcionaba hace 5 minutos" mi solución era ir a Run / Debug configuraciones y eliminar cualquier configuración bajo "Android Tests". A veces estas configuraciones se dañan si refactore la clase bajo prueba (por ejemplo, moviéndose a un nuevo paquete).

Introduzca aquí la descripción de la imagen

Para Intellij 15, resolví este problema mediante:

  1. Apertura de la configuración de la "estructura del proyecto"
  2. Al hacer clic en "Módulos" (a la izquierda)
  3. Ficha "Fuentes"
    a. Haga clic derecho en su directorio de origen (por lo general src) haga clic en "Fuente".
    segundo. Haga clic derecho en su directorio de prueba haga clic en "Prueba"
    do. Haga clic derecho en el directorio de su directorio haga clic en 'Excluido'
  4. Ir a la pestaña "Rutas"
    a. Haga clic en el botón de opción 'Utilizar módulo de compilación de la ruta de salida'
    segundo. Seleccione su directorio de ruta de salida para 'Ruta de salida'
    do. Seleccione su directorio de ruta de prueba para 'Probar ruta de salida'
  5. Haga clic en Aceptar

No sé si ayuda para Android Studio, pero tuve algún tipo de conflicto Intellij-Gradle. Resuelto por "clic derecho" en el archivo de prueba y pulse "compilar archivo … Test.java". Después de eso podría volver a ejecutar pruebas individuales.

Ninguno de los anteriores lo arregló para mí. Lo que ayudó fue seguir las instrucciones :

Crear una configuración de prueba

En Android Studio:

  • Abrir menú Ejecutar -> Editar configuraciones
  • Añadir una nueva configuración de Android Tests
  • Elija un módulo
  • Añadir un corredor de instrumentación específico:

  Android.support.test.runner.AndroidJUnitRunner 

Ejecute la configuración recién creada.

Tuve el mismo problema en Android Studio 2.3.1, resulta que era sólo un error con AS. Ejecutar la misma prueba en la versión 2.2.1 funciona bien.

Si sólo ejecutas Android Studio en el canal Cannary, te recomiendo que también instales una versión estable. http://tools.android.com/tips/using-multiple-android-studio-versions

Tuve pruebas que estaban funcionando bien hasta gradle y estudio de androide se actualizó.

Además de agregar un constructor predeterminado a las pruebas, es posible que tenga que hacer algunas de estas cosas para que su suite de pruebas funcione

Bajo src/ create androidTest/java/<your-package-name>/test . Tenga en cuenta el androidTest . Cualquier otra cosa que incluya instrumentTest no funcionará.

Añadir esto a build.gradle

 sourceSets { testLocal { java.srcDir file('src/androidTest/java') resources.srcDir file('src/androidTest/resources') } } android{ sourceSets { instrumentTest.setRoot('src/androidTest/') } } dependencies{ testLocalCompile 'junit:junit:4.11' } task localTest(type: Test, dependsOn: assemble) { testClassesDir = sourceSets.testLocal.output.classesDir android.sourceSets.main.java.srcDirs.each { dir -> def buildDir = dir.getAbsolutePath().split('/') buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') sourceSets.testLocal.compileClasspath += files(buildDir) sourceSets.testLocal.runtimeClasspath += files(buildDir) } classpath = sourceSets.testLocal.runtimeClasspath } check.dependsOn localTest 

Agrega esto al AndroidManifest.xml

  <instrumentation android:name="android.test.InstrumentationTestRunner" android:label="Tests for my packaged app" android:targetPackage="<my-package-name>.test" /> 

Tuve un problema similar. No estoy seguro de por qué esto está ocurriendo, pero pude solucionarlo yendo a: "File"> "Invalidate Caches / Restart" en Android Studios.

Ninguna de las otras soluciones funcionó para mí, pero pude conseguir esto funcionando simplemente desinstalando la aplicación existente o la suite de pruebas, luego ejecutando las pruebas.

En mi caso, el proyecto en el que trabajaba tenía un par de módulos. Ninguna de las soluciones que encontré para este error me ayudó, y de alguna manera me di cuenta de que si agregaba las dependencias de prueba en AMBOS de los archivos build.gradle, las pruebas mágicamente comenzaron a funcionar. No importa si sus pruebas viven en sólo uno de los módulos, ambos archivos gradle deben incluir las dependencias y el valor testInstrumentationRunner.

Por lo tanto, si como yo, ninguna de las otras respuestas lo han ayudado, intente agregar estas líneas al archivo build.gradle de cada uno de sus módulos:

 android { .... defaultConfig { ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 

Y luego también agregar:

 dependencies { ... // Test androidTestCompile 'com.android.support:support-annotations:23.4.0' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' } 

Este artículo me ayudó: Empty test suite

Básicamente tuve que crear un paquete – instrumentTest / java – en mi directorio src, y poner todas las pruebas allí. Entonces podría ejecutar estas pruebas individualmente.

Tenía un proyecto en bruto de Java donde esto estaba ocurriendo. Simplemente Java + JUnit4. Definitivamente reside con algo en sus archivos .idea / o .iml. Deseché el mío, reimporté, y finalmente las pruebas volvieron a funcionar.

La clase de prueba puede excluirse de la compilación. Corregirlo en setting-compiler-exclude.

Aquí están mis pasos de depuración por los que paso cuando Android Studio de repente decide dejar de ejecutar / depurar pruebas (¡Y muchacho esto sucede embarassingly a menudo !!):

  • Construir: → Reconstruir proyecto
  • Reinicie el dispositivo: reinicie el dispositivo / emulador y vuelva a intentarlo
  • Interruptor de dispositivo: si tiene un teléfono normal y un emulador desconecte uno y trate de ejecutarlo con sólo uno de los dispositivos
  • Android Studio: Archivo -> Invalidar cachés y reiniciar
  • Monitor de actividad / Administrador de tareas: ordene los procesos por nombre, vea si hay un proceso sin nombre que está usando un montón de RAM, este es un proceso "fantasma" del estudio de Android que se debe matar
  • Git revert: intenta almacenar / revertir tu código más reciente. A veces hay un error de compilación que Android Studio / gradle falla y sólo tratará de ejecutar código uncompilable.
  • Desinstale y vuelva a instalar Android Studio.

Voy a agregar más arreglos como me encuentro con ellos!

No hice nada y el problema desapareció después de medio día de dolor, abrí y cerré los proyectos muchas veces, corrió las pruebas de cada clase manualmente, tal vez eso arregló mi.

En el estudio de Android con el marco de Spock he cambiado la versión de mi gradle de 2.2.2 a 3.2.1 y todo va bien.

En mi caso, ninguna de las respuestas anteriores funcionó. La solución era simplemente mover la clase de prueba a otro paquete .

Esto ocurrió bajo androidTest/

En mi caso, tuve mis pruebas instrumentadas en androidTest/java/<package.name>/MyTestingClass , pero había establecido mi variante de construcción actual a "preproduction". Y ahí está el punto! Como se especifica en la documentación de Android Studio :

De forma predeterminada, todas las pruebas se ejecutan en el tipo de compilación de depuración.

Class not found. Empty test suite. mensaje Class not found. Empty test suite. Class not found. Empty test suite. Continué apareciendo hasta que hice esto:

  1. Añadir esta línea a mi AndroidManifest.xml :

     android{ [...] testBuildType "preproduction" } 
  2. Gradle sincronizado.
  3. Elimine mis configuraciones de prueba anteriores ya que no tienen en cuenta esta sincronización de Gradle.

Luego ejecuté las pruebas de nuevo y esta vez se ejecutan simplemente perfecto!

Obviamente, se necesita un dispositivo de destino para ejecutar las pruebas, ya que son pruebas instrumentadas. Por algunas razones, Android Studio a veces no le pide apuntar a este dispositivo de destino y simplemente solicitar el mensaje "Empty Test Suite". Hay diferentes maneras de arreglar esto, aquí hay algunos:

  • Ejecute su aplicación principal y seleccione un dispositivo de destino o

  • Vaya a la configuración Ejecutar (Ejecutar / Ejecutar … / Editar Configuraciones) y modifique las Opciones de Destino de Destino

En mi caso que el problema fue causado debido al error en mi código, realmente eso estaba en clase de la aplicación, así que la actividad de la blanco no fue abierta y la salida de la prueba imprime

Error vacío de la suite de pruebas

He intentado ejecutar pruebas directamente desde el terminal con adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner . Con esto imprime para usted mucho más sobre la excepción.

La respuesta aceptada no resolvió mi problema. Así que decidí copiar ExampleInstrumentedTest que se crea de forma predeterminada en Android Studio y se ejecuta sin ningún problema, cambió su nombre durante el proceso de copia (no Refactor-> Rename después de copiar!) Y pegó el contenido de mi prueba de unidad en él. Después de que el error desapareció.

Acabo de renombrar el archivo y el problema arreglado.

  • Configuración de JAVA_HOME para intelliJ?
  • Instalar Android Studio en la instalación existente de IntelliJ Ultimate
  • Finalización del código en Android Studio
  • Desinstalar depurador en Android Studio
  • Generación automática de referencia @String en Android Studio
  • La carpeta "gen" de Android y SVN - enemigos amargos
  • Dispositivo Virtual Android - Armeabi-v7a vs x86_64
  • Android Studio Start Failed - ClassNotFoundException: com.intellij.ide.plugins.PluginManager
  • Búsqueda rápida en el nombre de archivo Android studio
  • Autogeneración de Android TAG de registro en Android Studio / Intellij idea
  • IDEA de IntelliJ y Eclipse en el mismo proyecto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.