No se pudo encontrar la información de instrumentación para: ComponentInfo {} – error intentando probar en IntelliJ con Gradle

Cada vez que intento ejecutar mis pruebas la consola dice esto:

Running tests Test running startedTest running failed: Unable to find instrumentation info for: ComponentInfo{com.employeeappv2.employeeappv2.test/android.test.InstrumentationTestRunner} Empty test suite. 

He estado atrapado en esto por un tiempo y las soluciones que he visto en línea hasta ahora no han ayudado. Mi estructura de proyecto se establece así:

* Módulo Principal -src * instrumentTest -java * main -java -manifest * build.gradle

Mi archivo build.gradle tiene este aspecto:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.9.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.1.0" defaultConfig { minSdkVersion 16 targetSdkVersion 19 versionCode 1 versionName "2.1.0" testPackageName "login.test" testInstrumentationRunner "android.test.InstrumentationTestRunner" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard- rules.txt' } } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/scandit.zip') compile project(':pullToRefresh') compile 'com.android.support:appcompat-v7:19.+' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1+' compile 'org.springframework.android:spring-android-rest-template:1.0.1+' compile 'org.json:json:20090211' compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1' compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0' compile 'com.fasterxml.jackson.core:jackson-core:2.3.1' compile 'com.android.support:support-v4:19.1.+' compile 'com.mcxiaoke.volley:library:1.0.+@aar' androidTestCompile 'junit:junit:3.8' } 

¿Necesita tener un manifiesto separado para su directorio de pruebas? Si es así, ¿cómo sería?

Edit: He intentado agregar un manifiesto a mi directorio instrumentTest sin suerte. Tenga en cuenta que no pude obtener IntelliJ para resolver el nombre targetPackage, por lo que aparece en rojo.

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.employeeappv2.employeeappv2.src.instrumentTest" android:versionCode="1" android:versionName="1.0.0"> <application> <uses-library android:name="android.test.runner" /> </application> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.employeeappv2.employeeappv2.src.main"/> </manifest> 

Estoy usando Android Studio 1.1 y los siguientes pasos solucionaron este problema para mí:

  1. En Run - Edit Configurations - Android Tests
    Especifique el corredor de instrumentación como android.test.InstrumentationTestRunner

  2. A continuación, en la ventana de herramientas "Construir variantes" (a la izquierda), cambie el artefacto de prueba a Android Instrumentation Tests .

No se requiere testInstrumentationRunner en build.gradle y no se requiere ninguna etiqueta de instrumentación en el archivo de manifiesto.

Tuve el mismo error cuando intenté agregar multiDexEnabled true a build.gradle .

Estoy agregando mi experiencia aquí, porque este es uno de los primeros golpes de Google al buscar con el ... Unable to find ... ComponentInfo ... message.

En mi caso añadir testInstrumentationRunner como aquí hizo el truco:

 ... android { ... defaultConfig { ... testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner" } } 

(Tengo com.android.tools.build:gradle:1.5.0 )

Cuando creé un nuevo paquete, Studio creó una clase ApplicationTest. Usando us.myname.mypackage como ejemplo, se creó la siguiente estructura de directorios:

 app/[myPackage]/src/androidTest/java/us/myname/mypackage/ApplicationTest.class 

Inicialmente funcionó fuera de la caja. Dejó de trabajar después de instalar los sabores del producto. Posteriormente hice los siguientes cambios en build.gradle:

 defaultConfig { ... testInstrumentationRunner "android.test.InstrumentationTestRunner" } 

Algunos prefieren

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

(Con mi configuración actual, tengo que usar ...InstrumentationTestRunner cuando está en depuración y AndroidJUnitRunner mientras uso el tipo de compilación de lanzamiento.)

La configuración anterior sólo funciona con el tipo de compilación de depuración. Si desea usarlo con release o con un tipo de compilación personalizado, puede incluir lo siguiente en build.gradle:

 buildTypes { release { ... } debug { ... } } testBuildType "release" 

En la pestaña "Construir variantes" en la parte inferior izquierda de Studio, asegúrese de tener Android Instrumentation Tests y el tipo de buildType correcto seleccionado.

Para lo que vale la pena, AS 2.3 se colgó cuando creé un corredor de prueba personalizado después de usar el corredor de prueba regular. Tengo el mismo error que aparece en la pregunta.

La eliminación de las configuraciones de depuración para TODAS las pruebas instrumentadas de Android y la reconstrucción lo arreglaron. Creo que el problema mintió en el hecho de que ya no puede elegir un corredor personalizado en las configuraciones de depuración, ya que es más probable que se construye a través de gradle.

Tuve que hacer una combinación de la respuesta de VikingGlen, la respuesta de Liuting, y esta respuesta. Esta respuesta funciona para Android Studio versión 2.1.

  1. Ejecutar -> Editar configuraciones … -> General -> Corredor de instrumentación específica (opcional): "android.support.test.runner.AndroidJUnitRunner"

  2. En build.gradle (el uno con todas sus dependencias), ponga esto:

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

Entonces podría ejecutar pruebas de este tipo:

 @RunWith(AndroidJUnit4.class) @LargeTest public class ApplicationTest { @Rule public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class); @Test public void login() { //Open Drawer to click on navigation. onView(withId(R.id.drawer_layout)) .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed. .perform(open()); // Open Drawer } } 

Así que el principal problema fue que cuando creé una carpeta de androidTest en / src /, no estaba siendo recogida por IntelliJ como una carpeta de origen para la prueba (subdirectorio java debe convertirse en verde). Yo estaba usando IntelliJ 13.0.3 y después de actualizar a 13.1.3, todos mis problemas se fueron.

* Nota: no intentes agregar un manifiesto a tu carpeta de androidTest, los documentos de Gradle especifican específicamente que el manifiesto debe ser generado automáticamente al crear la carpeta androidTest. El problema para mí era que el archivo no estaba siendo generado ya que androidTest no estaba siendo reconocido por IntelliJ / Gradle, lanzando así el error de no instrumentación.

Tuve este problema y lo arreglé al ir a Ejecutar -> Editar Configuraciones -> Verde '+' botón en la parte superior izquierda -> JUnit

A partir de ahí, establezca 'usar la mod de classpath …' en 'app' (o su nombre de aplicación predeterminado, que es el que aparece a la izquierda de la ejecución (botón de reproducción) cuando ejecuta la aplicación)

Finalmente, ponga su nombre de clase de prueba en el cuadro de texto 'class:'. Haga clic en aplicar y bien.

En este punto, si la clase de prueba no tiene otros errores, debería funcionar.

Esto es lo que noté en mi proyecto, en mi módulo de aplicación (main) build.gradle tuve la siguiente configuración buildType

 buildTypes { debug { multiDexEnabled true } mock { initWith(buildTypes.debug) } } testBuildType "mock" 

Cuando utilicé AndroidJUnitRunner como corredor de pruebas (ambos de Android Studio) y como testInstrumentationRunner en build.gradle, las pruebas funcionaron sin problemas.

En un submódulo que tenía multiDexEnabled true como defaultConfig

 defaultConfig { multiDexEnabled true .... } 

Me encontré con el problema de

 Test running startedTest running failed: Unable to find instrumentation info for:{mypackage.xy/android.support.test.runner.AndroidJUnitRunner"} 

Cuando especificé AndroidJUnitRunner en IDE y el submodule build.gradle. Y esto se fijó especificando MultiDexTestRunner como el corredor de prueba en IDE / build.gradle.

Para resumir, use MultiDexTestRunner para ejecutar pruebas cuando multiDexEnabled true se especifica en build.gradle, de lo contrario use AndroidJUnitRunner como corredor de prueba.

La solución para mi problema es cambiar el nombre del método desde

 @Test public void test(){ ... } 

a

 @Test public void testSomething(){ ... } 

Espero que ayude a alguien.

  • ¿Cómo poner clases específicas en el archivo principal DEX?
  • Gradle Android Maven Plugin no crea el archivo pom automáticamente
  • Agrega la API de datos de YouTube a Android Studio
  • Error: Error de ejecución de la tarea ': app: dexDebug'. Com.android.ide.common.process.ProcessException
  • Los archivos múltiples dex definen <mi paquete> / BuildConfig, no pueden encontrar la causa:
  • Cómo obtener gradle para compilar la versión local de picasso
  • ¿Cómo uso el procesador de anotación Java personalizado en Gradle?
  • Obtener el error "entrada duplicada: com / google / android / gms / internal / zzble.class" al intentar agregar un paquete
  • Cómo agregar la dependencia de compilación a la ruta de clase javadoc en gradle
  • AndroidManifest.xml para Gradle instrumentTest
  • ¿Cuál es la diferencia entre compilar, testCompile y proporcionada en dependencia de gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.