android - sae - list index out of bounds(9)
Falló la ejecución de la prueba: no se pudo encontrar la información de instrumentación para: ComponentInfo{}-error al intentar probar en IntelliJ con Gradle (9)
Así que el principal problema fue que cuando creé una carpeta androidTest bajo / src /, IntelliJ no la estaba recogiendo como una carpeta fuente para probar (el subdirectorio java debería ponerse verde). Estaba usando IntelliJ 13.0.3 y después de actualizar a 13.1.3, todos mis problemas desaparecieron.
* Nota: no intente agregar un manifiesto a su carpeta androidTest, los documentos de Gradle especifican que el manifiesto debe generarse automáticamente cuando crea la carpeta androidTest. El problema para mí fue que el archivo no se generaba ya que el IntelliJ / Gradle no reconocía el Android Test y arrojaba el error de no instrumentación.
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. La estructura de mi proyecto está configurada así:
* Módulo principal -src * instrumentTest -java * main -java -manifest * build.gradle
Mi archivo build.gradle se ve así:
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 por separado para su directorio de pruebas? Si es así, ¿qué aspecto tendría?
Editar: Intenté agregar un manifiesto a mi directorio instrumentalTest sin suerte. Tenga en cuenta que no pude hacer que IntelliJ resolviera el nombre de 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>
Cuando creé un nuevo paquete, Studio creó una clase ApplicationTest. Utilizando us.myname.mypackage como ejemplo, se creó la siguiente estructura de directorio:
app/[myPackage]/src/androidTest/java/us/myname/mypackage/ApplicationTest.class
Inicialmente funcionó de la caja. Dejó de funcionar después de que instalé los sabores del producto. Posteriormente, realicé 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 versiones).
La configuración anterior solo funciona con el tipo de compilación de depuración. Si desea usarlo con versión o con un tipo de compilación personalizado, puede incluir lo siguiente en build.gradle:
buildTypes {
release {
...
}
debug {
...
}
}
testBuildType "release"
En la pestaña Variantes de compilación, en la parte inferior izquierda de Studio, asegúrese de tener Android Instrumentation Tests
y el buildType
correcto seleccionado.
Esto es lo que noté en mi proyecto, en mi aplicación (principal) module build.gradle tuve la siguiente configuración buildType
buildTypes {
debug {
multiDexEnabled true
}
mock {
initWith(buildTypes.debug)
}
}
testBuildType "mock"
Cuando utilicé AndroidJUnitRunner como el corrector de prueba (ambos de Android Studio) y como testInstrumentationRunner en build.gradle, las pruebas se ejecutaron 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.x.y/android.support.test.runner.AndroidJUnitRunner"}
cuando especifiqué AndroidJUnitRunner en IDE y en el submódulo build.gradle. Y esto se solucionó especificando MultiDexTestRunner como el corredor de prueba en IDE / build.gradle.
Para resumir, use MultiDexTestRunner para ejecutar pruebas cuando se especifica multiDexEnabled true en build.gradle, sino use AndroidJUnitRunner como el corredor de prueba.
Estoy usando Android Studio 1.1 y los siguientes pasos resolvieron este problema para mí:
En
Run - Edit Configurations - Android Tests
Especifique el corredor de instrumentación comoandroid.test.InstrumentationTestRunner
Luego, en la ventana de la herramienta "Variantes de compilación" (a la izquierda), cambie el artefacto de prueba a
Android Instrumentation Tests
.
No se requiere testInstrumentationRunner en build.gradle y no se requiere una etiqueta de instrumentación en el archivo de manifiesto.
La solución para mi problema es cambiar el nombre del método de
@Test
public void test(){
...
}
a
@Test
public void testSomething(){
...
}
Espero que ayude a alguien.
Por lo que vale, AS 2.3 se colgó cuando creé un corredor de prueba personalizado después de usar el corredor de prueba regular. Recibí el mismo error que se publicó en la pregunta.
Al eliminar las configuraciones de depuración para TODAS las pruebas instrumentadas de Android y la reconstrucción, se corrigió. Creo que el problema radica en el hecho de que ya no se puede elegir un corredor personalizado en las Configuraciones de depuración, ya que es muy probable que esté integrado en gradle.
Tuve el mismo error cuando intenté agregar multiDexEnabled true
para build.gradle
.
Estoy agregando mi experiencia aquí, porque este es uno de los primeros hits de Google al buscar con ... Unable to find ... ComponentInfo ...
Mensaje de error de ... Unable to find ... ComponentInfo ...
En mi caso, agregar testInstrumentationRunner
como aquí hizo el truco:
...
android {
...
defaultConfig {
...
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}
}
(Tengo com.android.tools.build:gradle:1.5.0
)
Tuve este problema y lo solucioné yendo a Ejecutar -> Editar configuraciones -> Botón verde ''+'' en la esquina superior izquierda -> JUnit
A partir de ahí, configure ''use the classpath mod ...'' 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 ''clase:''. Haga clic en aplicar y está bien.
En este punto, si la clase de prueba no tiene otros errores, debería funcionar.
Tuve que hacer una combinación de la answer de VikingGlen, la answer Liuting y this respuesta. Esta respuesta funciona para Android Studio versión 2.1.
Ejecutar -> Editar configuraciones ... -> General -> Ejecutor de instrumentación específico (opcional): "android.support.test.runner.AndroidJUnitRunner"
En
build.gradle
(el que tiene todas tus dependencias), pon 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
}
}