¿Por qué el corrector de prueba de Android informa “Suite de prueba vacía”?

Me estoy golpeando la cabeza contra la pared tratando de descubrir por qué IntelliJ / Android está informando sobre el “conjunto vacío de pruebas”. Tengo un pequeño proyecto con dos módulos IntelliJ (“Proyectos” en Eclipse). El módulo de prueba de la unidad tiene su propio AndroidManifest.xml, que he pegado en la parte inferior. Estoy intentando ejecutar ActivityUnitTestCase , ya que las pruebas dependerán del objeto Context .

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

¿Por qué el corredor de prueba no detecta el testBlah() -method como una prueba?

           

Y aquí está mi clase de prueba :;

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

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

Algunas de las preguntas de las que todavía no estoy seguro son:

  1. ¿Necesito una Anotación sobre el método de prueba de la Unidad?
  2. ¿Debo prefijar el método con “prueba” o solo para las pruebas JUnit?
  3. ¿Puedo hacer pruebas en nilzor.myapp.tests de nilzor.myapp.tests ?

Pero la pregunta principal de esta publicación es ¿por qué el corredor de prueba no detecta mi prueba ?

Debe proporcionar el constructor predeterminado para su clase de prueba, por ejemplo:

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

sobre tus otras preguntas:

  1. No. Mis pruebas aún se ejecutan sin anotaciones, pero creo que es una buena práctica tenerlas. Le permite especificar el tamaño de las pruebas para ejecutar. Consulte ¿Cuál es el objective de las anotaciones @SmallTest, @MediumTest y @LargeTest en Android? para más detalles.

  2. Sí, necesitas el prefijo “prueba”. InteliJ proporciona una advertencia de “método nunca utilizado” cuando no hay un prefijo de “prueba” y omite ese método durante la prueba.

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

Si esto sucede “de repente” o “estuvo funcionando hace 5 minutos”, mi solución fue ir a las configuraciones de Ejecutar / Depurar y eliminar cualquier configuración en “Pruebas de Android”. A veces, estas configuraciones se corrompen si refactorizo ​​la clase bajo prueba (por ejemplo, moviéndome a un nuevo paquete).

enter image description here

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

Crear una configuración de prueba

En Android Studio:

  • Abre el menú Ejecutar -> Editar Configuraciones
  • Agregar una nueva configuración de Android Tests
  • Elige un módulo
  • Agregue un corredor de instrumentación específico:

  android.support.test.runner.AndroidJUnitRunner 

Ejecute la configuración recién creada.

Tuve un problema similar. No estoy seguro de por qué ocurre esto pero pude solucionarlo yendo a: “Archivo”> ​​”Invalidar caches / reiniciar” en Android Studio.

No sé si ayuda para Android Studio, pero tuve algún tipo de conflicto Intellij-Gradle. Lo resolvió haciendo “clic derecho” en el archivo de prueba y presionando “comstackr archivo … Test.java”. Después de eso, pude realizar pruebas únicas nuevamente.

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

Si solo está ejecutando Android Studio en el canal de Cannary, le recomiendo que también instale una versión estable. http://tools.android.com/tips/using-multiple-android-studio-versions

Tenía pruebas que funcionaban bien hasta que gradle y Android Studio se actualizaron.

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

Debajo de src/ create androidTest/java//test . Tenga en cuenta el androidTest . Cualquier otra cosa, incluida instrumentTest , no funcionará.

Agregar 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 

Agregue esto a AndroidManifest.xml

   

Para Intellij 15, resolví este problema de la siguiente manera:

  1. Apertura de la configuración ‘Estructura del proyecto’
  2. Al hacer clic en ‘Módulos’ (a la izquierda)
  3. Pestaña ‘Fuentes’
    a. Haga clic derecho en su directorio de origen (generalmente src), haga clic en ‘Fuente’.
    segundo. Haga clic derecho en su directorio de prueba, haga clic en ‘Test’
    do. Haga clic derecho en su directorio de salida, haga clic en ‘Excluido’
  4. Ir a la pestaña ‘Rutas’
    a. Haga clic en el botón de opción “Utilizar la ruta de salida de comstackción del módulo”
    segundo. Seleccione su directorio de ruta de salida para ‘Ruta de salida’
    do. Seleccione su directorio de ruta de prueba para ‘Probar la ruta de salida’
  5. Haga clic en Aceptar

Obviamente, necesita un dispositivo de destino para ejecutar sus pruebas, ya que son pruebas instrumentadas. Por alguna razón, el estudio de Android a veces no le pide que apunte a este dispositivo de destino y solo solicita el mensaje “Empty Test Suite”. Hay diferentes maneras de arreglar esto, aquí hay algunas:

  • ejecuta tu aplicación principal y selecciona un dispositivo de destino o

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

En mi caso, ese problema fue causado por un error en mi código, en realidad eso estaba en la clase de la aplicación, por lo que la actividad del objective no se abrió y la salida de prueba imprime

Error de suite de prueba vacía

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

Ninguna de las otras soluciones funcionó para mí, pero pude hacer que esto funcionara simplemente desinstalando la aplicación existente o el conjunto de pruebas, y luego ejecutando las pruebas.

En mi caso, el proyecto en el que estaba trabajando 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 añadía las dependencias de prueba en AMBOS archivos build.gradle, las pruebas mágicamente comenzaron a funcionar. No importa si sus pruebas viven en solo 1 de los módulos, ambos archivos de gradle deben incluir las dependencias y el valor de testInstrumentationRunner.

Entonces, si, como yo, ninguna de las otras respuestas te ha ayudado, intenta agregar estas líneas al archivo build.gradle de cada uno de tus módulos:

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

y luego también agregue:

 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' } 

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

Esto sucedió en androidTest/

Acabo de renombrar el archivo y el problema solucionado.

Tuve el mismo problema, ¡y el motivo fue que mi clase de prueba no tenía Test al final del nombre de la clase!

Este artículo me ayudó: Suite de prueba vacía

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 Java en bruto donde esto estaba ocurriendo. Simplemente Java + JUnit4. Definitivamente reside en algo en sus archivos .idea / o .iml. Deseché el mío, volví a importar y, finalmente, las pruebas se volvieron a ejecutar.

La clase de prueba puede ser excluida de la comstackción. Solucionarlo en setting-compiler-exclude.

Estos son mis pasos de depuración que paso cuando Android Studio, de repente, decide dejar de ejecutar / depurar pruebas (¡¡y a veces esto sucede embarazosamente !!):

  • Build: → Reconstruir proyecto
  • Reiniciar dispositivo: reinicia tu dispositivo / emulador y vuelve a intentarlo
  • Cambio de dispositivo: si tiene un teléfono regular y un emulador, desenchúfelo e intente ejecutarlo con solo uno de los dispositivos.
  • Android Studio: Archivo -> Invalidar cachés y reiniciar
  • Monitor de actividades / Administrador de tareas: clasifique los procesos por nombre, vea si hay un proceso sin nombre que está usando mucho RAM, este es un proceso “fantasma” del estudio de Android que debe ser asesinado
  • git revertir: intente esconder / revertir su último código. A veces, hay un error de comstackción que Android Studio / gradle falla y que simplemente intentará ejecutar código no comstackble.
  • Desinstalar y luego reinstalar Android Studio.

¡Añadiré más correcciones cuando me encuentre con ellas!

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

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

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

Experimenté el error “Suite de prueba vacía” al intentar ejecutar pruebas de unidades locales en mi proyecto de Android Studio 3.0.

Después de leer la documentación del desarrollador de Android, rápidamente me di cuenta de que el problema se debía a mi configuración de gradle, que incluía las siguientes líneas.

 testImplementation 'com.android.support.test:runner:0.5' testImplementation 'com.android.support.test:rules:0.5' 

La clase AndroidJUnitRunner es un corrector de prueba JUnit que le permite ejecutar clases de prueba JUnit 3- o JUnit 4 en dispositivos Android .

Como mis pruebas eran locales y, por lo tanto, no es necesario ejecutarlas en ningún dispositivo, la eliminación de las entradas anteriores de com.android.support.test … me permitió ejecutar las pruebas unitarias.

Estaba haciendo algunas inserciones en un db en el método @BeforeClass. Me di cuenta de que tenía un problema de mapeo de objetos / bases de datos. Este problema de mapeo de datos fue la causa de este problema para mí.

Tuve este problema porque tenía esto en mi build.gradle:

 testOptions { execution "ANDROID_TEST_ORCHESTRATOR" } 

Aunque no estaba usando Android Test Orchestrator (debe haberse copiado de los tutoriales por error).

Comentando eso lo resolvió para mí.

En mi caso, tuve mis pruebas instrumentadas en androidTest/java//MyTestingClass , pero establecí mi variante de comstackción actual en “preproducción”. Y ahí está el punto! Como se especifica en la documentación de Android Studio :

Por defecto, todas las pruebas se ejecutan contra el tipo de comstackción de depuración.

El mensaje Class not found. Empty test suite. Class not found. Empty test suite. siguió apareciendo hasta que hice esto:

  1. Agregue esta línea a mi build.gradle :

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

¡Luego ejecuté las pruebas otra vez y esta vez funcionan perfectamente!

Mi problema fue causado por una excepción lanzada en el método @BeforeClass de mi caso de prueba. De alguna manera no estaba causando que la prueba fallara, solo la encontré inspeccionando la salida de logcat.

¡Solucioné la excepción y de repente mis pruebas se estaban ejecutando!

Después de enfrentar el problema hoy -no poder ejecutar las pruebas android instrumentadas con Empty suite error- encontré un problema de git sobre este problema y gracias a Stephan Linzner, pude ejecutar las pruebas.

tl; dr Tienes que hacer clic con el botón derecho en el paquete de prueba y no en la clase para poder ejecutar las pruebas.

Referencia: https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863

Me sucedió esto cuando @Mock error una variable de clase no simulada con la anotación @Mock Se eliminó la anotación y las pruebas se ejecutaron correctamente. Esto sucedió con Junit 4.5 en Android Studio