unitarias unit test studio run pruebas hacer ejemplo create como testing gradle android-studio classnotfoundexception android-instrumentation

testing - studio - unit test android



Android: la ejecución de la instrumentación falló debido a ''java.lang.ClassNotFoundException'': no ​​se encontraron pruebas (5)

Intento ejecutar una prueba de instrumentación a través de "gradlew connectedAndroidTest". Me aparece el siguiente error:

Tests on GT-I9305 - 4.3 failed: Instrumentation run failed due to ''java.lang.ClassNotFoundException'' com.android.builder.testing.ConnectedDevice > hasTests[GT-I9305 - 4.3] FAILED No tests found. :mobile:connectedAndroidTest FAILED

Esta es la salida con la opción --stacktrace:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task '':mobile:connectedAndroidTest''. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51) at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction(Main.java:33) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35) at org.gradle.launcher.GradleMain.main(GradleMain.java:23) at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48) Caused by: org.gradle.api.GradleException: There were failing tests. See the report at: file:///D:/myapp/mobile/build/outputs/reports/androidTests/connected/index.html at com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.runTests(DeviceProviderInstrumentTestTask.groovy:92) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 47 more

Mi AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp" > <instrumentation android:targetPackage="com.example.myapp" android:name="android.test.InstrumentationTestRunner" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="com.example.myapp.MyApplication"> <activity android:name="com.example.myapp.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <uses-library android:name="android.test.runner" /> </application> </manifest>

Mi build.gradle :

apply plugin: ''com.android.application'' apply plugin: ''com.neenbedankt.android-apt'' apply plugin: ''robolectric'' android { compileSdkVersion 21 buildToolsVersion "20.0.0" defaultConfig { applicationId "com.example.myapp" minSdkVersion 18 targetSdkVersion 21 versionCode 1 versionName "1.0" testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } sourceSets { androidTest { setRoot(''src/androidTest'') } test { setRoot(''src/test'') } } } android { packagingOptions { exclude ''META-INF/LICENSE.txt'' exclude ''LICENSE.txt'' exclude ''META-INF/LICENSE'' exclude ''META-INF/NOTICE'' } } configurations { apt } apt { arguments { resourcePackageName android.defaultConfig.packageName androidManifestFile variant.outputs[0].processResources.manifestFile } } ext { daggerVersion = ''1.2.2''; androidAnnotationsVersion = ''3.2''; robobindingVersion = ''0.8.9''; jodatimeVersion = ''2.5.1''; ormliteVersion = ''4.48''; ottoVersion = ''1.3.5''; commonsioVersion = ''2.0.1''; playservicesVersion = ''6.1.71''; supportv4Version = ''21.0.2''; javaxinjectVersion = ''1''; junitVersion = ''4.11''; robolectricVersion = ''2.4''; } dependencies { androidTestCompile files(''lib/espresso-1.1.jar'', ''lib/testrunner-1.1.jar'', ''lib/testrunner-runtime-1.1.jar'') androidTestCompile ''com.google.guava:guava:14.0.1'' androidTestCompile ''com.squareup.dagger:dagger:1.2.2'' androidTestCompile ''org.hamcrest:hamcrest-integration:1.1'' androidTestCompile ''org.hamcrest:hamcrest-core:1.1'' androidTestCompile ''org.hamcrest:hamcrest-library:1.1'' androidTestCompile("junit:junit:${junitVersion}") { exclude module: ''hamcrest-core'' } androidTestCompile("org.robolectric:robolectric:${robolectricVersion}") { exclude module: ''classworlds'' exclude module: ''commons-logging'' exclude module: ''httpclient'' exclude module: ''maven-artifact'' exclude module: ''maven-artifact-manager'' exclude module: ''maven-error-diagnostics'' exclude module: ''maven-model'' exclude module: ''maven-project'' exclude module: ''maven-settings'' exclude module: ''plexus-container-default'' exclude module: ''plexus-interpolation'' exclude module: ''plexus-utils'' exclude module: ''wagon-file'' exclude module: ''wagon-http-lightweight'' exclude module: ''wagon-provider-api'' } androidTestCompile ''com.squareup:fest-android:1.0.+'' apt "org.robobinding:codegen:$robobindingVersion" compile("org.robobinding:robobinding:$robobindingVersion:with-dependencies") { exclude group: ''com.google.guava'', module: ''guava'' } apt "org.androidannotations:androidannotations:${androidAnnotationsVersion}" compile "org.androidannotations:androidannotations-api:${androidAnnotationsVersion}" apt "com.squareup.dagger:dagger-compiler:${daggerVersion}" compile "com.squareup.dagger:dagger:${daggerVersion}" compile fileTree(dir: ''libs'', include: [''*.jar'']) wearApp project('':wear'') compile project('':javamail'') compile "com.google.android.gms:play-services:${playservicesVersion}" compile "com.android.support:support-v4:${supportv4Version}" compile "com.squareup:otto:${ottoVersion}" compile "javax.inject:javax.inject:${javaxinjectVersion}" compile "com.j256.ormlite:ormlite-core:${ormliteVersion}" compile "com.j256.ormlite:ormlite-android:${ormliteVersion}" compile group: ''commons-io'', name: ''commons-io'', version: "${commonsioVersion}" compile "net.danlew:android.joda:${jodatimeVersion}" } apply plugin: ''idea'' idea { module { testOutputDir = file(''build/test-classes/debug'') } } android.applicationVariants.all { variant -> def aptOutput = file("${project.buildDir}/generated/source/apt/${variant.dirName}") println "****************************" println "variant: ${variant.name}" println "manifest: ${variant.processResources.manifestFile}" println "aptOutput: ${aptOutput}" println "****************************" variant.javaCompile.doFirst { println "*** compile doFirst ${variant.name}" aptOutput.mkdirs() variant.javaCompile.options.compilerArgs += [ ''-processorpath'', configurations.apt.getAsPath(), ''-AandroidManifestFile='' + variant.processResources.manifestFile, ''-s'', aptOutput ] } }

Mi clase de prueba :

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { public MainActivityTest() { super(MainActivity.class); } public void testSomething() { assertTrue(true); } }

¿Alguna idea?


Acabo de encontrarme con este problema cuando, después de algunas refactorizaciones, intenté ejecutar la prueba desde la consola.

La solución fue arreglar el AndroidManifest.xml, ya que contenía referencias a actividades ya existentes y otras clases.

Claro, el proyecto se compilará con un manifiesto incorrecto, pero cuando intente ejecutarlo, el dispositivo no encontrará las clases definidas. Por lo tanto, la ClassNotFoundException.


Copiando la respuesta de la Respuesta Original .

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.


Me encontré con el mismo problema y lo resolví actualizando a espresso 2.0

Reemplace testInstrumentationRunner en su archivo build.gradle

testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner

a

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

y actualice las nuevas dependencias a 2.0

androidTestCompile files(''lib/espresso-1.1.jar'', ''lib/testrunner-1.1.jar'', ''lib/testrunner-runtime-1.1.jar'')

a

androidTestCompile ''com.android.support.test:testing-support-lib:0.1'' androidTestCompile ''com.android.support.test.espresso:espresso-core:2.0''

También debe cambiar el espacio de nombre en sus pruebas, pero se dará cuenta al ejecutarlas.

Explicación completa: https://code.google.com/p/android-test-kit/wiki/EspressoSetupInstructions

Editar:

Parece que era demasiado pronto para responder, la respuesta que publiqué solo la corrigió en dispositivos 5.0. A continuación se muestra lo que lo solucionó en dispositivos más antiguos:

Excluya javax.inject de la nueva dependencia cambiando:

androidTestCompile ''com.android.support.test.espresso:espresso-core:2.0''

a

androidTestCompile(''com.android.support.test.espresso:espresso-core:2.0'') { exclude group: ''javax.inject'' }

fuente: código Dagger que da NoClassDefFoundError cuando se ejecutan las pruebas Espresso, el funcionamiento normal funciona bien


Me enfrenté a un problema similar. En mi proyecto había múltiples módulos y se habilitó multidex. Para mí, el problema estaba en un módulo particular opción de habilitación multidex (multiDexEnabled true) que faltaba.

En el módulo principal (aplicación) build.gradle era como seguir:

... multiDexEnabled true testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner" ...

En otro módulo (de qué aplicación depende), a build.gradle le faltaba la línea "multiDexEnabled true". Agregar esta línea resolvió el problema.


Obtuve este problema cuando escribí una prueba en Kotlin y usé espacios en el nombre del método. Se bloquea con el mensaje de error: java.lang.ClassNotFoundException: Didn''t find class "android.support.test.runner.AndroidJUnitRunner"

En Android Studio: No tests where found

Prueba rota: espacios en nombres de métodos, no funciona en Android

class RandomTest { @Test fun `do not use spaces it will not work on Android devices or emulators`() { assertThat(2 + 2).isEqualTo(4) } }

Solución: espacios eliminados, todo se compila normalmente

class RandomTest { @Test fun write_method_names_java6_compatible_without_spaces() { assertThat(2 + 2).isEqualTo(4) } }

Esto podría suceder porque desactivé el "Identificador ilegal de Android" de inspección para que no me moleste cuando escribo pruebas JVM.